Загрузка страницы и Selenium - драйвер ничего не делает после загрузки

Я пытаюсь автоматизировать (Java + Selenium) тестирование сайта, но у меня много проблем с ожиданием и получением того, что я хочу.

Когда у меня есть несколько готовых модульных тестов, моя проблема заключается в следующем:
* Если я не ставлю никаких ожиданий и просто выполняю код, Firefox загружается, страница загружается и больше ничего не делает. У меня сложилось впечатление, что страница загрузится до возврата управления, но здесь, похоже, этого не происходит. Если вместо запуска я ставлю точку останова, отлаживаю ее и запускаю шаг за шагом, все работает отлично, поэтому я думаю, что это проблема времени.

Если я напишу это, то это тоже хорошо работает:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  

Но если я хочу, чтобы он ждал, пока элемент будет виден (например, поле имени пользователя или пароля) или кнопка будет нажата (например, кнопка входа), курсор остается в строке URL и ничего не делает, кроме загрузки страницы .

        WebDriverWait wait = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@id='isc_E']"))));

(Да, я знаю, что мог бы использовать идентификатор вместо xpath, это остаток одной из моих многочисленных попыток).

После этого фрагмента кода он должен выполнить несколько sendKeys() в двух текстовых полях, затем щелкнуть() на кнопке входа и остановиться. Мне нужно добавить что-нибудь еще, чтобы фактически выполнить команду ожидания, или этого должно быть достаточно?.

Я знаю, что, вероятно, где-то довольно глупо все испортил, но я просто не могу найти или понять это самостоятельно.

Спасибо.


person Laucien    schedule 28.01.2013    source источник
comment
Можете ли вы показать нам, как вы нажимаете кнопку отправки.   -  person Smit    schedule 29.01.2013
comment
Конечно, что-то вроде этого -› driver.findElement(By.xpath(//*[@id='isc_E'])).click().   -  person Laucien    schedule 29.01.2013
comment
@Arran: Не знаю, как опубликовать здесь полный код, поэтому вот ссылка на него -› ссылка   -  person Laucien    schedule 29.01.2013


Ответы (1)


Я не уверен, как вы нажимаете кнопку отправки. Но это должно идти по пути ниже

// WebDriver instance for explicit wait by default on until condition
WebDriverWait wait = new WebDriverWait(driver, 5000);
// waits until elements gets ready 
WebElement we = wait
              .until(ExpectedConditions.elementToBeClickable(By
                            .xpath("//*[@id=\"searchSubmit\"]")));

//  once elements is ready it will clicked
driver.findElement((By) we).click();

driver.findElement(By.xpath("//*[@id=\"searchSubmit\"]")).click();

Явные и неявные ожидания

Я надеюсь, это поможет вам.

person Smit    schedule 28.01.2013
comment
У меня есть драйвер, который находит элементы либо по идентификатору, либо по xpath, а кнопка отправки находит xpath, поэтому после ожидания, которое я опубликовал, прежде чем сделать driver.findElement(By.xpath(//*[@id='isc_E']) ). Не могли бы вы объяснить эту строку немного лучше, пожалуйста? driver.findElement((By) we).click();, не знал, что выделенная жирным шрифтом часть может быть написана так. Я ищу веб-элемент, который вы нашли на предыдущем шаге, верно? - person Laucien; 29.01.2013
comment
@Laucien Я обновил ответ. Попробуйте так. Я также добавил ссылку, которая может вам помочь. Я просто играл с селеном в свободное время, поэтому я не профессионал в этом. - person Smit; 30.01.2013