Проблема с ожиданием исчезновения элемента в WebDriver
#1
Отправлено 16 ноября 2011 - 13:20
Есть у меня следующая задача: необходимо дождаться исчезновения элемента типа "Ожидайте загрузку", и после этого уже анализировать полученный в виде таблицы результат.
Воспользовался примером ожидания появления элемента на странице
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.XPath("//table/tbody/tr/td/div[2]/div/div/div[3]/div[2]/div/table/tbody/tr/td[3]/div"));
});
но мне его надо переделать под то, что я ожидаю исчезновения элемента. Но вот не знаю, как это сделать. Использую WebDriver. Может кто-то знает как это сделать?
Заранее спасибо.
#2
Отправлено 16 ноября 2011 - 13:54
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(null));
Вот реализация этого условия, если в .Net нет аналога, переделайте самостоятельно:
/** * An Expectation for checking that an element is either invisible or not * present on the DOM. * * @param locator used to find the element */ public static ExpectedCondition<Boolean> invisibilityOfElementLocated( final By locator) { return new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver driver) { try { return !(findElement(locator, driver).isDisplayed()); } catch (NoSuchElementException e) { // Returns true because the element is not present in DOM. The // try block checks if the element is present but is invisible. return true; } catch (StaleElementReferenceException e) { // Returns true because stale element reference implies that element // is no longer visible. return true; } } }; }
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#3
Отправлено 16 ноября 2011 - 15:00
сейчас если элемент не видим, то тест останавливается, ошибка org.openqa.selenium.NoSuchElementException: Unable to locate element:
Что-то как - то я слишком много вопросов походу задаю, аж стыдно становится(
#4
Отправлено 16 ноября 2011 - 17:24
Метод для определения видимости элементавопрос к теме, если элемент не видим, то как в этом случае записать if, т.е. если элемент видим, то выполнить такое то действие, если не видим, то другое?
...
if(!driver.findElements(By.locator).isEmpty()){ // Проверяем, что элемент присутствует на странице if(driver.findElement(By.locator).isDisplayed()){ // Проверяем видимость элемента return true; } } return false;
#5
Отправлено 16 ноября 2011 - 17:36
С невидимыми (но существующими) элементами можно выполнять некоторые действия, но не все -- например, получить значения атрибутов можно, а вот click сделать не получится.
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#6
Отправлено 08 декабря 2012 - 09:43
"Для Java есть ряд уже готовых условий, в том числе такое:
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(null));"
я просто только начинаю разбираться с Webdriver, и проблема с загрузкой страницы.
Страница не успевает загрузиться, как действия начинают выполнятся и тест валится.Я использовала Thread.sleep(); но их во многих местах приходится вставлять, что очень замедляет тесты.
заранее спасибо!
#7
Отправлено 09 декабря 2012 - 08:49
в setUp стоитскажите пожалуйста, а как и где это применить
"Для Java есть ряд уже готовых условий, в том числе такое:
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(null));"
я просто только начинаю разбираться с Webdriver, и проблема с загрузкой страницы.
Страница не успевает загрузиться, как действия начинают выполнятся и тест валится.Я использовала Thread.sleep(); но их во многих местах приходится вставлять, что очень замедляет тесты.
заранее спасибо!
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
???
#8
Отправлено 10 декабря 2012 - 04:52
#9
Отправлено 10 декабря 2012 - 08:52
Нужен кодда, эта строчка прописана, но тестам все равно не хватает ожидания загрузки страницы...
WebDriver автоматически ждет загрузку страницы.
Поэтому 2 возможных варианта:
1)страница содержит аякс
2)Вы что-нибудь не так делаете
без кода сложно сказать
#10
Отправлено 10 декабря 2012 - 15:46
если (текст сообщения.содержит("Ожидание загрузки")){ Ждать 1 секунду } иначе { какой-то дод, хотя можно и без него }
#11
Отправлено 11 декабря 2012 - 07:46
Нужен код
да, эта строчка прописана, но тестам все равно не хватает ожидания загрузки страницы...
WebDriver автоматически ждет загрузку страницы.
Поэтому 2 возможных варианта:
1)страница содержит аякс
2)Вы что-нибудь не так делаете
без кода сложно сказать
вот код:
<div id="login-form">
<form id="login" class="form-block" method="post" action="">
<div id="message-block" class="message-block public-message message-info hidden">
<div class="message-inner">
</div>
<div>
<div class="form-one-line-block">
<label for="login_username">email</label>
<input id="login_username" class="require valid" type="text" value="" name="login_username">
</div>
<div class="form-one-line-block">
<div class="container">
<input id="login_password" class="require valid" type="password" name="login_password">
</div>
<div class="form-one-line-block">
<button id="btn" class="button" type="submit">
<span class="button-l"></span>
<span class="button-c">Войти</span>
<span class="button-r"></span>
</button>
</div>
</div>
</form>
вожу логин, пароль и валится на кнопки вход, если поставить sleep хотя бы на 2 сек, то кнопка нажимается и все ОК
делала так
public void setUp() throws Exception {
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
baseUrl = "https://";
///
driver.findElement(By.id("login_username")).clear();
driver.findElement(By.id("login_username")).sendKeys("daniil-potapov@bk.ru");
driver.findElement(By.id("login_password")).clear();
driver.findElement(By.id("login_password")).sendKeys("123456789q");
waitAndClickBy("btn");
#12
Отправлено 11 декабря 2012 - 20:11
скажите пожалуйста, а как и где это применить
"Для Java есть ряд уже готовых условий, в том числе такое:
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(null));"
я просто только начинаю разбираться с Webdriver, и проблема с загрузкой страницы.
Страница не успевает загрузиться, как действия начинают выполнятся и тест валится.Я использовала Thread.sleep(); но их во многих местах приходится вставлять, что очень замедляет тесты.
заранее спасибо!
import static org.openqa.selenium.support.ui.ExpectedConditions.*;
waitFor(invisibilityOfElementLocated(By.cssSelector("селектор элемента, который хотите дождаться чтобы стал невидимый")));
#13
Отправлено 12 декабря 2012 - 08:50
скажите пожалуйста, а как и где это применить
"Для Java есть ряд уже готовых условий, в том числе такое:
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(null));"
я просто только начинаю разбираться с Webdriver, и проблема с загрузкой страницы.
Страница не успевает загрузиться, как действия начинают выполнятся и тест валится.Я использовала Thread.sleep(); но их во многих местах приходится вставлять, что очень замедляет тесты.
заранее спасибо!
import static org.openqa.selenium.support.ui.ExpectedConditions.*;
waitFor(invisibilityOfElementLocated(By.cssSelector("селектор элемента, который хотите дождаться чтобы стал невидимый")));
а зачем ждать, чтобы он стал невидимый, когда я хочу ждать пока загрузиться страница и нажать кнопку?
#14
Отправлено 15 декабря 2012 - 08:59
скажите пожалуйста, а как и где это применить
"Для Java есть ряд уже готовых условий, в том числе такое:
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(null));"
я просто только начинаю разбираться с Webdriver, и проблема с загрузкой страницы.
Страница не успевает загрузиться, как действия начинают выполнятся и тест валится.Я использовала Thread.sleep(); но их во многих местах приходится вставлять, что очень замедляет тесты.
заранее спасибо!
import static org.openqa.selenium.support.ui.ExpectedConditions.*;
waitFor(invisibilityOfElementLocated(By.cssSelector("селектор элемента, который хотите дождаться чтобы стал невидимый")));
а зачем ждать, чтобы он стал невидимый, когда я хочу ждать пока загрузиться страница и нажать кнопку?
Ну тогда
waitFor(presenceOfElementLocated(By.cssSelector("элемент которого хотите дождаться ")));
и потом выполняйте другие действия
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных