Повтор действия (Webdriver+Java)
#1
Отправлено 04 июля 2013 - 06:55
Простой findElement выкидывает исключение и не подходит.
тут коротко упоминается, что нужно использовать List<WebElement> и проверять нулевое содержание в списке, но не могу понять как это сделать.
#2
Отправлено 05 июля 2013 - 06:18
Смысл в том что Вы ищете не один элемент, а группу (List<WebElement>), через findElements потом проверяете размер полученного списка через elements.size(), если он >0 значит элемент найден, если нет, значит элемента нет.тут коротко упоминается, что нужно использовать List<WebElement> и проверять нулевое содержание в списке, но не могу понять как это сделать.
#3
Отправлено 05 июля 2013 - 10:55
Скажите пожалуйста, как можно организовать повтор како-либо дейтсвия, если не проходит условие,условием цикла должно являться отсуствие определенного элемента на странице.
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(By.id("foo")));
#4
Отправлено 08 июля 2013 - 10:53
Скажите пожалуйста, как можно организовать повтор како-либо дейтсвия, если не проходит условие,условием цикла должно являться отсуствие определенного элемента на странице.new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(By.id("foo")));
Это под while не поставить, т к значение null никогда не примет
#5
Отправлено 08 июля 2013 - 11:02
Скажите пожалуйста, как можно организовать повтор како-либо дейтсвия, если не проходит условие,условием цикла должно являться отсуствие определенного элемента на странице.new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(By.id("foo")));
Я так понимаю вопрос не в том что элемент не виден, а в том что он может быть еще не выведен на страницу и через какое-то время надо ее перегрузить.
Если да, то вот например вариант решения:
List<WebElement> wait_for_tags = driver.findElements(By.xpath("//div[@class='tags-block']"));
while (wait_for_tags.size() == 0) {
try {
System.out.println("Tag is not displayed yet, let's wait 10000ms and re-load page");
Thread.sleep(10000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
driver.get(//тут перегружаем нужную страницу, другой вариант - используя sendKey послать F5);
wait_for_tags = driver.findElements(By.xpath("//div[@class='tags-block']"));
}
#6
Отправлено 08 июля 2013 - 14:57
Я похоже неправильно понял задачу. Кусок кода ниже периодически выполняет метод FooExecutor.foo() пока не будет найден элемент с локатором By.id("bar"). То, что надо?Это под while не поставить, т к значение null никогда не примет
public class MyExpectedConditions{ public static ExpectedCondition<Boolean> fooUntilBarPresent(final By locator) { return new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver driver) { try{ FooExecutor.foo(); return driver.findElement(locator); } catch(NoSuchElementException e){ return false;} } }; } }
new WebDriverWait(driver, 10).until(MyExpectedConditions.fooUntilBarPresent(By.id("bar")));
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных