2013-07-24 2 views
1

Я использую Selenium WebDriver для получения некоторого контента с сайта, который динамически загружает его с помощью Ajax. Я создал пользовательский класс Wait, чтобы проверить условие на странице, чтобы убедиться, что страница загрузилась, прежде чем продолжить. Я использовал FluentWait, чтобы установить интервал опроса равным 2 и тайм-аутом до 10. Однако я заметил, что он проверяет первый раз при приращении времени 0, затем ждет 2 секунды, если условие было ложным, затем снова проверено и т. Д.Selenium FluentWait wait before начать опрос

Поскольку на странице берется некоторая времени для загрузки, она всегда ложна при первой проверке, но обычно на втором. Есть ли способ сделать Wait ждать 2 секунды перед проверка в первый раз? То есть проверяйте время 2,4 и 6, если необходимо, а не на 0,2,4 и 6?

Спасибо, BSG

EDIT Я просил упомянуть почему я такое поведение - в конце концов, я использую Ждать так, как это означало быть использован. Преимущество, которое я получаю от него, вернулось в первый раз: WebDriver, по-видимому, открывает новый сокет каждый раз, когда он выдает команду браузеру. По какой-то причине эти сокеты не всегда закрываются после выполнения вызова. При выполнении большого количества вызовов за короткое время (например, при повторной проверке состояния, которое является тем, что Wait), можно запустить из виртуальных сокетов, а драйвер сработает. (Отсутствие достаточного количества виртуальных сокетов, по-видимому, является известной проблемой в Windows 7, но я не могу изменить свою систему.)

Чем меньше звонков на драйвер, который я выдаю за короткий промежуток времени, тем меньше вероятность его использования является превышение количества доступных сокетов. Я заметил, что первая проверка никогда не возвращает true, и поэтому она просто открывает сокет без причины, что приводит к сбою программы. Вот почему я хочу подождать. Надеюсь, это объяснение полезно для тех, кто ищет информацию о том, почему они продолжают получать SocketExceptions в WebDriver.

+0

Вы должны упомянуть, какое преимущество у вас было бы при первой проверке, вернув true. –

+0

Я не совсем уверен, почему вам нужно это беспокоиться - вы используете 'wait' для чего он предназначен. – Arran

ответ

1

Очевидным ответом будет просто вставить time.sleep(2) (или аналогичный метод) перед первой проверкой. Будет ли это работать на то, что вы пытаетесь сделать?

+0

Да, это был очевидный ответ. Я хотел посмотреть, есть ли способ включить желаемую функциональность в «Ожидание», потому что я не очень хотел слишком часто играть с чередованием потоков, но кажется, что это невозможно. Благодарю. – bsg

Смежные вопросы