Перейти к содержимому

Фотография

Повтор действия (Webdriver+Java)


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 lokofc

lokofc

    Активный участник

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Pavel

Отправлено 04 июля 2013 - 06:55

Скажите пожалуйста, как можно организовать повтор како-либо дейтсвия, если не проходит условие,условием цикла должно являться отсуствие определенного элемента на странице.

Простой findElement выкидывает исключение и не подходит.


тут коротко упоминается, что нужно использовать List<WebElement> и проверять нулевое содержание в списке, но не могу понять как это сделать.
  • 0

#2 Keiga

Keiga

    Постоянный участник

  • Members
  • PipPipPip
  • 174 сообщений
  • ФИО:Евгений
  • Город:Москва


Отправлено 05 июля 2013 - 06:18

тут коротко упоминается, что нужно использовать List<WebElement> и проверять нулевое содержание в списке, но не могу понять как это сделать.

Смысл в том что Вы ищете не один элемент, а группу (List<WebElement>), через findElements потом проверяете размер полученного списка через elements.size(), если он >0 значит элемент найден, если нет, значит элемента нет.
  • 0

#3 neman

neman

    Активный участник

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 05 июля 2013 - 10:55

Скажите пожалуйста, как можно организовать повтор како-либо дейтсвия, если не проходит условие,условием цикла должно являться отсуствие определенного элемента на странице.

new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(By.id("foo")));

  • 0

#4 lokofc

lokofc

    Активный участник

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Pavel

Отправлено 08 июля 2013 - 10:53


Скажите пожалуйста, как можно организовать повтор како-либо дейтсвия, если не проходит условие,условием цикла должно являться отсуствие определенного элемента на странице.

new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(By.id("foo")));


Это под while не поставить, т к значение null никогда не примет
  • 0

#5 Nwd

Nwd

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 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']"));
}
  • 1

#6 neman

neman

    Активный участник

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 08 июля 2013 - 14:57

Это под while не поставить, т к значение null никогда не примет

Я похоже неправильно понял задачу. Кусок кода ниже периодически выполняет метод FooExecutor.foo() пока не будет найден элемент с локатором By.id("bar"). То, что надо?
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")));

  • 1


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных