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

Фотография

Ожтдание элемента


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

#21 Rara

Rara

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

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Кондрашов Юрий Алексеевич
  • Город:Минск, Беларусь


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

Идея хорошая, я уже начал ее реализовывать, но у меня на этой странице нет ни одного элемента .k-loading-image, вообще не понимаю откуда он и как в него клик попадает.

Он может, например, удаляться из DOM при помощи JavaScript.

И еще не понимаю - как вообще возможно, что есть что-то поверх нужного элемента что-то?

Элементам на странице можно задавать координаты. А значит можно нескольким элементам задать одинаковые. Но отображаться на экране будет только один - остальные будут скрыты под ним. Получается, что неважно то, что вебдрайвер (или пользователь) целится указателем мыши в место где находится скрытый веб-элемент. Клик всё равно будет по тому, что сверху. Даже если у него другой локатор.
  • 0
Я бы переписал жизнь, но Бог не дает мне исходники

#22 lokofc

lokofc

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

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

Отправлено 20 июня 2013 - 17:11

Он может, например, удаляться из DOM при помощи JavaScript.


А как же мне дожидаться пропадания ненужного, если я его обнаружить не могу? Ставить явное ожидание пропадания этого класса?

А если его нет на странице - ожидание будет просто игнорироваться и будет сыпаться все как и раньше.
  • 0

#23 Rara

Rara

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

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Кондрашов Юрий Алексеевич
  • Город:Минск, Беларусь


Отправлено 21 июня 2013 - 11:35

Если клик всё равно не будет доходить до нужного элемента, значит мы где-то ошиблись. Что делать дальше - я не знаю.
А если будет доходить, значит локатор ненужного элемента мы выбрали правильно. Несмотря на то, что его сложно было найти.
  • 0
Я бы переписал жизнь, но Бог не дает мне исходники

#24 lokofc

lokofc

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

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

Отправлено 21 июня 2013 - 15:09

Решил привязываться к другим элементам, загрузка которых точно обеспечит нормальное состояние нужной кнопки, работает хорошо)
  • 0

#25 lokofc

lokofc

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

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

Отправлено 02 июля 2013 - 13:39

Почему так плохо работают ExpectedConditions? Постоянно каки-то проблемы:

         while (ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='progress']")) != null){
        	  
        	  driver.findElement(By.xpath("//button[@data-commandname='newAction']")).click();
        	  
        	  if (ExpectedConditions.alertIsPresent() != null){ 
        		  
        	  driver.findElement(By.xpath("//button[@data-id='ok']")).click();
        	  
        	  } else break;
        	        	  
         }

Этот код, пока загружается файл на сайт пытается отправить сообщение с этимм файлом, но пока файл не загружен до конца - выходит окошко с кнопкой ОК, на которую надо нажать, если файл еще не прогружен опять попытаться отправить и опять нажать на ок

Проблема в том, что файл может прогрузится и после проверки первого условия и тогда сообщение успешно отправляется и не выходит никакого предупреждающего окна. Но junit упорно продолжает искать его, какие бы условия я не ставил

if (ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='progress']")) != null){ 
        		  
        	  driver.findElement(By.xpath("//button[@data-id='ok']")).click();
        	  
        	  } else break;

if (ExpectedConditions.elementToBeClickable(By.xpath("//button[@data-id='ok']]")) != null){ 
        		  
        	  driver.findElement(By.xpath("//button[@data-id='ok']")).click();
        	  
        	  } else break;

if (ExpectedConditions.visibilityOfElementLocated(By.xpath("//button[@data-id='ok']]")) != null){ 
                          
                  driver.findElement(By.xpath("//button[@data-id='ok']")).click();
                  
                  } else break;

Ни один из варинтов не проходит, в чем может быть дело?
  • 0

#26 Keiga

Keiga

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

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


Отправлено 02 июля 2013 - 13:56

Ни один из варинтов не проходит, в чем может быть дело?

А оно вообще работает? Все эти Ваши сложные конструкции с while и прочим? Вы какой ручной тест пытаетесь автоматизировать? Можно на шаги взглянуть?
Просто допустим:
if (ExpectedConditions.alertIsPresent() != null){ 
                          
                  driver.findElement(By.xpath("//button[@data-id='ok']")).click();
                  
                  } else break;
Вы так закрываете Alert? И оно работает? Потому что для этого вроде используют такой код:
Alert alert = driver.switchTo().alert();
            alert.accept();

  • 0

#27 lokofc

lokofc

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

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

Отправлено 02 июля 2013 - 15:07


Ни один из варинтов не проходит, в чем может быть дело?

А оно вообще работает? Все эти Ваши сложные конструкции с while и прочим? Вы какой ручной тест пытаетесь автоматизировать? Можно на шаги взглянуть?
Просто допустим:
if (ExpectedConditions.alertIsPresent() != null){ 
                          
                  driver.findElement(By.xpath("//button[@data-id='ok']")).click();
                  
                  } else break;
Вы так закрываете Alert? И оно работает? Потому что для этого вроде используют такой код:
Alert alert = driver.switchTo().alert();
            alert.accept();


Работает, пока файл до конца не загрузился у меня в цикле сначала нажимается "+" (см скрин)потом "ОК".

Но на последней интерации почему-то выполняются оба действия, хотя по идее файл уже загружен, после нажатия на "+" файл отправляется и никакого алерта нет, но вебдрайвер попрежнему ищет его.

Вобщем мне совсем неопнятно, поидее еслибы бы первое условие не проходило, цикл бы не запускался, но оно проходит, загрузки файла ждет и самое итерересное - сообщение с файлом отправляет, но потом начинает искать долбанный алерт и вылетает, когда его не находит.

Прикрепленные файлы

  • Прикрепленный файл  53.png   11,19К   11 Количество загрузок:

  • 0

#28 Keiga

Keiga

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

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


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

Ладно, спрошу по другому. Вы уверены, что:
ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='progress']")) != null
Вообще может быть null? Мне кажется он будет ждать указанный элемент столько сколько Вы указали в wait, а если по каким-то причинам не найдёт его, то выдаст NoSuchElementException и тест просто упадёт.
У Вас вообще все падает с какой ошибкой то? И в какой строчке?
  • 0

#29 lokofc

lokofc

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

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

Отправлено 03 июля 2013 - 11:07

while (ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='progress']")) != null){
                  
                  driver.findElement(By.xpath("//button[@data-commandname='newAction']")).click();
                  
                  if (ExpectedConditions.alertIsPresent() != null){ 
                          
                  driver.findElement(By.xpath("//button[@data-id='ok']")).click();
                  
                  } else break;
                                  
         }


Падает на этой строчке

driver.findElement(By.xpath("//button[@data-id='ok']")).click();

Потому, что пытается найти кнопку ОК алертного окна, но его уже нет, т к сообщение отправилось.(no such element)
  • 0

#30 lokofc

lokofc

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

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

Отправлено 03 июля 2013 - 11:22

И кстати, насчет сложных условий
    do {
    	
    driver.findElement(By.name("login")).clear();
    	Thread.sleep(500);
    driver.findElement(By.name("login")).sendKeys(login);
    driver.findElement(By.xpath("//input[@type='password']")).clear();
    	Thread.sleep(500);
    driver.findElement(By.xpath("//input[@type='password']")).sendKeys(password);
    	Thread.sleep(2000);
    driver.findElement(By.id("loginButton")).click();
    	Thread.sleep(1000);
    
    } while (ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".k-item-wrapper")) == null);

Работает корректно, что мне и нужно делает.
  • 0

#31 lokofc

lokofc

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

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

Отправлено 03 июля 2013 - 16:20

Ладно, спрошу по другому. Вы уверены, что:

ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='progress']")) != null
Вообще может быть null? Мне кажется он будет ждать указанный элемент столько сколько Вы указали в wait, а если по каким-то причинам не найдёт его, то выдаст NoSuchElementException и тест просто упадёт.
У Вас вообще все падает с какой ошибкой то? И в какой строчке?



Вот, наконецто вас понял, да выражение действительно не может быть null((

А как же тогда быть? Допустим мне нужно повторять операцию

driver.findElement(By.name("login")).clear();
    	Thread.sleep(500);
    driver.findElement(By.name("login")).sendKeys(login);
    driver.findElement(By.xpath("//input[@type='password']")).clear();
    	Thread.sleep(500);
    driver.findElement(By.xpath("//input[@type='password']")).sendKeys(password);
    	Thread.sleep(2000);
    driver.findElement(By.id("loginButton")).click();
    	Thread.sleep(1000);
до тех пор, пока не будет успешный вход?(Просто сайт, который я тестирую по непонятным причинам имеет особеность затупливать при входе на него. Повторяется 1 раз из 20, но всеже мешает очень сильно) Какое ставить условие?
  • 0


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

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