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

Selenium WebDriver: полное руководство
онлайн, начало 19 октября
Логи как инструмент тестировщика
онлайн, начало 22 октября
Школа для начинающих тестировщиков
онлайн, начало 122 октября
Тестирование REST API
онлайн, начало 22 октября
Фотография

if-циклы при выполнении теста

Selenium Selenium WebDriver Java Automation

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

#1 Raindrops

Raindrops

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

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

Отправлено 21 Декабрь 2017 - 15:46

Есть элемент, который может принимать 2 вида, в зависимости от ввода пользователя:
<li class="b-result m-wrng" id="result-panel" style="cursor: pointer;">
и
<li class="b-result m-corr" id="result-panel" style="cursor: pointer;">
 
Если class="b-result m-wrng" - нужно завершить тест
Если же class="b-result m-corr" - тест нужно продолжить.

Есть ли какая-то возможность это реализовать? 
 

 


  • 0

#2 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 742 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 21 Декабрь 2017 - 17:22

В чем собственно проблема? В составлении условия или локатора?

Это, конечно, возможно.


  • 0

http://starbugss.blogspot.ru - "Звездные баги", мой блог.


#3 Raindrops

Raindrops

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

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

Отправлено 21 Декабрь 2017 - 17:56

В чем собственно проблема? В составлении условия или локатора?

Это, конечно, возможно.

Никак не могу сообразить как оформить локатор. 


  • 0

#4 Spock

Spock

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 056 сообщений
  • ФИО:Роман

Отправлено 21 Декабрь 2017 - 17:56

написать 2 теста, в одном сделать неправильный ввод и дождаться первого элемента

в другом тесте сделать правильный ввод и дождаться второго элемента


  • 0

#5 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 742 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 21 Декабрь 2017 - 18:58

Примерно так, при желании можно еще ID добавить.

 

XPath

//li[contains(@class,'m-wrng')]
//li[contains(@class,'m-corr')]

CSS

li[class*='m-wrng']
li[class*='m-corr']

  • 0

http://starbugss.blogspot.ru - "Звездные баги", мой блог.


#6 Raindrops

Raindrops

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

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

Отправлено 21 Декабрь 2017 - 18:58

написать 2 теста, в одном сделать неправильный ввод и дождаться первого элемента

в другом тесте сделать правильный ввод и дождаться второго элемента

Вот только я спрашивал совсем не об этом.
Кроме того,  class может быть "b-result m-corr" и после десятка вводов, а может стать "b-result m-wrng" и после первого. Поэтому и нужен if цикл.


  • 0

#7 Raindrops

Raindrops

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

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

Отправлено 21 Декабрь 2017 - 19:26

 

Примерно так, при желании можно еще ID добавить.

 

XPath

//li[contains(@class,'m-wrng')]
//li[contains(@class,'m-corr')]

CSS

li[class*='m-wrng']
li[class*='m-corr']

Поправьте меня, пожалуйста. Никак не могу добиться работы теста.
Сейчас мой код выглядит так:
if(webDriver.findElement(By.xpath("//li[contains(@class,'m-corr')]")).isDisplayed()){

     //делай это.

}

else if(webDriver.findElement(By.xpath("//li[contains(@class,'m-wrng')]")).isDisplayed()){
     //сделай так.
}

 

В случае если отображается m-corr - выполняется все внутри if и тест завершается. Но если первым отображается m-wrong - тест падает на if и до else if даже не доходит


  • 0

#8 soleksenko2702

soleksenko2702

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

  • Members
  • PipPipPip
  • 190 сообщений
  • ФИО:Олексенко Сергей

Отправлено 22 Декабрь 2017 - 07:34

 

 

Примерно так, при желании можно еще ID добавить.

 

XPath

//li[contains(@class,'m-wrng')]
//li[contains(@class,'m-corr')]

CSS

li[class*='m-wrng']
li[class*='m-corr']

Поправьте меня, пожалуйста. Никак не могу добиться работы теста.
Сейчас мой код выглядит так:
if(webDriver.findElement(By.xpath("//li[contains(@class,'m-corr')]")).isDisplayed()){

     //делай это.

}

else if(webDriver.findElement(By.xpath("//li[contains(@class,'m-wrng')]")).isDisplayed()){
     //сделай так.
}

 

В случае если отображается m-corr - выполняется все внутри if и тест завершается. Но если первым отображается m-wrong - тест падает на if и до else if даже не доходит

 

Все правильно, падает потому что не находит элемент.

Я бы в вашем случае получал элемент по id, насколько видно из примера он одинаковый для обоих случаев. А потом получал бы атрибут и проверял его в if.


  • 0

#9 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 742 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 22 Декабрь 2017 - 08:11

Поправьте меня, пожалуйста. Никак не могу добиться работы теста.

Сейчас мой код выглядит так:
if(webDriver.findElement(By.xpath("//li[contains(@class,'m-corr')]")).isDisplayed()){


     //делай это.

}

else if(webDriver.findElement(By.xpath("//li[contains(@class,'m-wrng')]")).isDisplayed()){
     //сделай так.
}

 

В случае если отображается m-corr - выполняется все внутри if и тест завершается. Но если первым отображается m-wrong - тест падает на if и до else if даже не доходит

 

Либо как вам подсказали выше, либо:

if(webDriver.findElements(By.xpath("//li[contains(@class,'m-corr')]")).size() > 0){
     //делай это.
}
else if(webDriver.findElements(By.xpath("//li[contains(@class,'m-wrng')]")).size() > 0){
     //сделай так.
}

  • 0

http://starbugss.blogspot.ru - "Звездные баги", мой блог.


#10 Spock

Spock

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 056 сообщений
  • ФИО:Роман

Отправлено 22 Декабрь 2017 - 08:34

вообще тест не должен содержать таких условий

 

получается что тест прогоняет только один вариант из двух, чуть ли не рандомно?


  • 0

#11 Raindrops

Raindrops

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

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

Отправлено 22 Декабрь 2017 - 09:13


Все правильно, падает потому что не находит элемент.

Я бы в вашем случае получал элемент по id, насколько видно из примера он одинаковый для обоих случаев. А потом получал бы атрибут и проверял его в if.

 

То есть примерно так?

 

 

Поправьте меня, пожалуйста. Никак не могу добиться работы теста.

Сейчас мой код выглядит так:
if(webDriver.findElement(By.xpath("//li[contains(@class,'m-corr')]")).isDisplayed()){


     //делай это.

}

else if(webDriver.findElement(By.xpath("//li[contains(@class,'m-wrng')]")).isDisplayed()){
     //сделай так.
}

 

В случае если отображается m-corr - выполняется все внутри if и тест завершается. Но если первым отображается m-wrong - тест падает на if и до else if даже не доходит

 

Либо как вам подсказали выше, либо:

if(webDriver.findElements(By.xpath("//li[contains(@class,'m-corr')]")).size() > 0){
     //делай это.
}
else if(webDriver.findElements(By.xpath("//li[contains(@class,'m-wrng')]")).size() > 0){
     //сделай так.
}

 

 Все отлично работает, безмерно благодарен Вам!


  • 0

#12 Raindrops

Raindrops

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

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

Отправлено 22 Декабрь 2017 - 09:19

вообще тест не должен содержать таких условий

 

получается что тест прогоняет только один вариант из двух, чуть ли не рандомно?

Есть некий тест (экзамен), в котором после ответа может отображаться либо True, либо False. Вот мой @Test и вводит рандомные ответы, дожидается появления обоих состояний (True и False) и завершает работу.


  • 0

#13 Raindrops

Raindrops

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

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

Отправлено 22 Декабрь 2017 - 09:21

 

 

 

Примерно так, при желании можно еще ID добавить.

 

XPath

//li[contains(@class,'m-wrng')]
//li[contains(@class,'m-corr')]

CSS

li[class*='m-wrng']
li[class*='m-corr']

Поправьте меня, пожалуйста. Никак не могу добиться работы теста.
Сейчас мой код выглядит так:
if(webDriver.findElement(By.xpath("//li[contains(@class,'m-corr')]")).isDisplayed()){

     //делай это.

}

else if(webDriver.findElement(By.xpath("//li[contains(@class,'m-wrng')]")).isDisplayed()){
     //сделай так.
}

 

В случае если отображается m-corr - выполняется все внутри if и тест завершается. Но если первым отображается m-wrong - тест падает на if и до else if даже не доходит

 

Все правильно, падает потому что не находит элемент.

Я бы в вашем случае получал элемент по id, насколько видно из примера он одинаковый для обоих случаев. А потом получал бы атрибут и проверял его в if.

Подозреваю, что я понял Вас не верно, потому что снова написал что-то не рабочее

if(webDriver.findElement(By.id("result-panel")).getAttribute("//li[contains(@class,'m-corr')]"){
System.out.println("True");
}
else if(webDriver.findElement(By.id("result-panel")).findElement(By.xpath("//li[contains(@class,'m-wrng')]")).isDisplayed()){
System.out.println("False");
}

Не могли бы Вы показать что имели ввиду? 


  • 0

#14 Spock

Spock

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 056 сообщений
  • ФИО:Роман

Отправлено 22 Декабрь 2017 - 09:41

 

 

Есть некий тест (экзамен), в котором после ответа может отображаться либо True, либо False. Вот мой @Test и вводит рандомные ответы, дожидается появления обоих состояний (True и False) и завершает работу.

допустим такая ситуация:

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


  • 0

#15 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 22 Декабрь 2017 - 09:49

 

 

 

 

Примерно так, при желании можно еще ID добавить.

 

XPath

//li[contains(@class,'m-wrng')]
//li[contains(@class,'m-corr')]

CSS

li[class*='m-wrng']
li[class*='m-corr']

Поправьте меня, пожалуйста. Никак не могу добиться работы теста.
Сейчас мой код выглядит так:
if(webDriver.findElement(By.xpath("//li[contains(@class,'m-corr')]")).isDisplayed()){

     //делай это.

}

else if(webDriver.findElement(By.xpath("//li[contains(@class,'m-wrng')]")).isDisplayed()){
     //сделай так.
}

 

В случае если отображается m-corr - выполняется все внутри if и тест завершается. Но если первым отображается m-wrong - тест падает на if и до else if даже не доходит

 

Все правильно, падает потому что не находит элемент.

Я бы в вашем случае получал элемент по id, насколько видно из примера он одинаковый для обоих случаев. А потом получал бы атрибут и проверял его в if.

Подозреваю, что я понял Вас не верно, потому что снова написал что-то не рабочее

if(webDriver.findElement(By.id("result-panel")).getAttribute("//li[contains(@class,'m-corr')]"){
System.out.println("True");
}
else if(webDriver.findElement(By.id("result-panel")).findElement(By.xpath("//li[contains(@class,'m-wrng')]")).isDisplayed()){
System.out.println("False");
}

Не могли бы Вы показать что имели ввиду? 

if(webDriver.findElements(By.xpath("//li[contains(@class,'m-corr')]").size() != 0){
...

  • 0

#16 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 315 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 26 Декабрь 2017 - 08:31

"Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. "
 
If - это не цикл, он не предназначен для "многократного исполнения набора инструкций". Циклы - это for или while, к примеру.

if(webDriver.findElement(By.id("result-panel")).getAttribute("//li[contains(@class,'m-corr')]"){
System.out.println("True");
}

 

Некорректно, т.к. у элемента li нет атрибута с названием "//li[contains(@class,'m-corr')]".

Кроме того, getAttribute - просто вернут значение указанного атрибута, а if работает с true/false - т.е. в if'е полученное значение атрибута нужно ещё и сравнить с чем-нибудь.

Например, if ( driver.findElement(By.cssLocator(locator)).getAttribute("value").contains("smth") ) { ... }

 

 
Если нужно выводить просто true/false - можно вариант Lzk ещё слегка сократить:
System.out.println(webDriver.findElements(By.xpath("//li[contains(@class,'m-corr')]").size() > 0)

  • 0


Selenium 2.0: стартовый уровень
онлайн, начало 9 ноября
Программирование на Java для тестировщиков
онлайн, начало 12 октября
Автоматизация функционального тестирования
онлайн, начало 5 октября
Selenium WebDriver: полное руководство
онлайн, начало 19 октября




Темы с аналогичным тегами Selenium, Selenium WebDriver, Java, Automation

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

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

Яндекс.Метрика
Реклама на портале