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

Фотография

Как написать цикл IF

if else цикл webdriver

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

#1 marinel

marinel

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

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


Отправлено 29 сентября 2015 - 14:45

Добрый день, подскажите, пожалуйста с циклом  условием IF

 

В приложении создаются документы и размещаются во вкладках.

 

Нухно написать цикл  условие, если первая вкладка не называется "New plan", то этот документ удалить.

 

я пишу

 

public void ControlStateForTesting() throws InterruptedException {
if (driver.findElement(By.xpath("//ul/li/a/span[contains(text(),'New plan')]")).getText() != "New plan")
{
deleteActionPlan();
}
}
 
но цикл условие не срабатывает и тест проходит, как будто первая вкладка есть "New plan", хотя в приложении на первой вкладке другой документ.
 
что же неправильно?
 
Заранее спасибо.

  • 0

#2 Snap

Snap

    Специалист

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


Отправлено 29 сентября 2015 - 14:49

if (driver.findElement(By.xpath("//ul/li/a/span[contains(text(),'New plan')]")).getText() != "New plan")

По условию получается, что "найди мне элемент с текстом "New plan", который не равен "New Plan", чего быть не может.

Всегда будет возвращать false.

Нужно изменить локатор так, чтобы искать не по тексту, а именно первую вкладку.

Предположительно: By.xpath("//ul/li/a/span[1]").getText()


  • 0

#3 Lzk

Lzk

    Специалист

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

Отправлено 29 сентября 2015 - 15:04

цикл это for, while ...

тебе нужно что то типа этого

 

и перебирать там элементы по их номеру

i=0
while
...
By.xpath("//ul/li/a/span[i++]").getText()

предварительно подсчитав кол-во всех подобных элементов (что бы цикл не упал из за того, что такого элемента не существует)


  • 0

#4 marinel

marinel

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

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


Отправлено 29 сентября 2015 - 15:13

Таким образом тоже не работает, как надо

 

public void ControlStateForTesting() throws InterruptedException {
if (driver.findElement(By.xpath("//ul/li/a/span[1]")).getText() != "New plan")
{
deleteActionPlan();
}
}

  • 0

#5 marinel

marinel

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

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


Отправлено 29 сентября 2015 - 15:16

цикл это for, while ...

тебе нужно что то типа этого

 

и перебирать там элементы по их номеру

i=0
while
...
By.xpath("//ul/li/a/span[i++]").getText()

предварительно подсчитав кол-во всех подобных элементов (что бы цикл не упал из за того, что такого элемента не существует)

 

Да, правда, Олег. Я говорю об условии... Мне нужно именно условие, выполняющееся для одной вкладки, все остальные последующие вкладки. меня в этом тесте не интересуют


  • 0

#6 Lzk

Lzk

    Специалист

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

Отправлено 29 сентября 2015 - 15:22

 

цикл это for, while ...

тебе нужно что то типа этого

 

и перебирать там элементы по их номеру

i=0
while
...
By.xpath("//ul/li/a/span[i++]").getText()

предварительно подсчитав кол-во всех подобных элементов (что бы цикл не упал из за того, что такого элемента не существует)

 

Да, правда, Олег. Я говорю об условии... Мне нужно именно условие, выполняющееся для одной вкладки, все остальные последующие вкладки. меня в этом тесте не интересуют

 

 

кинь HTML сюда


  • 0

#7 Tishka

Tishka

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

  • Members
  • PipPipPip
  • 211 сообщений
  • ФИО:Ахрамеев Антон

Отправлено 29 сентября 2015 - 15:31

А разве разумно использовать ветвление в тестах?

Насколько я помню, они должны быть линейными.

Использование if, while - это должны быть исключительные ситуации.


  • 0

#8 marinel

marinel

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

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


Отправлено 29 сентября 2015 - 15:38

 
<div id="tabbed" class="tabs">
<div class="tab-row">
<ul>
<li class="tab0 selected" >
<a href="#0">
<span>Dokument 1</span>
</a>
</li>
<li class="tab1 last" >
<a href="#1">
<span>New plan</span>
</a>
</li>
</ul>
</div>
</div>

  • 0

#9 marinel

marinel

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

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


Отправлено 29 сентября 2015 - 15:38

А разве разумно использовать ветвление в тестах?

Насколько я помню, они должны быть линейными.

Использование if, while - это должны быть исключительные ситуации.

 

А как же тогда проверить?


  • 0

#10 Lzk

Lzk

    Специалист

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

Отправлено 29 сентября 2015 - 15:43

 

 

xpath

//ul/li[2]/a/span

или

//ul/li[contains(@class,'tab1')]/a/span

  • 0

#11 Tishka

Tishka

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

  • Members
  • PipPipPip
  • 211 сообщений
  • ФИО:Ахрамеев Антон

Отправлено 29 сентября 2015 - 15:43

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

Чем больше логики закладываете в тесты, тем сложнее их будет поддерживать.


  • 0

#12 marinel

marinel

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

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


Отправлено 29 сентября 2015 - 15:56

 

 

 

xpath

//ul/li[2]/a/span

или

//ul/li[contains(@class,'tab1')]/a/span

ну вот у меня так   в первом варианте 

 

public void ControlStateForTesting() throws InterruptedException {
if (driver.findElement(By.xpath("//ul/li/a/span[1]")).getText() != "New plan")
{
deleteActionPlan();
}
}
 
 
Только что подставила и второй вариант - все равно не видит, что не выполняется условие и ему надо удалить документ.
 
Может дело не в xpath, а в самом условии.....

 


  • 0

#13 Lzk

Lzk

    Специалист

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

Отправлено 29 сентября 2015 - 16:07

Оу... Если надо , что первая вкладка так не называется тогда вот так
//ul/li[contains(@class,'tab0')]/a/span
  • 0

#14 TatyanaV

TatyanaV

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

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


Отправлено 30 сентября 2015 - 11:11

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

Чем больше логики закладываете в тесты, тем сложнее их будет поддерживать.

Все зависит от того, что именно Вы считаете "логикой" теста.

К примеру, у меня приложение по заполнению анкет (каких не важно, но информации в них много).

Для меня "логика" теста - метод подготовки данных по нужным мне условиям + метод заполнения анкеты + проверка результата.

В этом случае - никакого логики не будет. Все линейно.

Но ВНУТРИ метода подготовки данных и метода заполнения анкеты - и условия, и логика полноты и порядка заполнения в зависимости от условий, и ОТДЕЛЬНО логика работы с элементами (хелперы отдельно, описания страниц отдельно).

 

И, поверьте, "поддерживать" тесты достаточно просто: они короткие и линейные, как вы и пишите, суть теста будет понятна даже тому, кто не знает "деталей". В общем-то, при этом принципе организации их и поддерживать не требуется по сути - они должны работать "как есть". Изменения в программе влияют на "реализацию", но НИКАК не затрагивают код самого теста.

 

Могу сказать, что тесты у меня успешно запускаются на разных "площадках", с разными исходными данными/версиями и т.п., без необходимости что-то подстраивать в тестах. Они сами подстраиваются, подбирают нужные данные и знают, что и как выполнять.

======================

 

По теме - попробуйте так (ну или любой из предыдущих вариантов, с заменой сравнения по "!=" на !equals):

    public void controlStateForTesting() throws InterruptedException {
        ArrayList<WebElement> tabs = (ArrayList) driver.findElements(By.xpath("//div[@id='tabbed']//span"));
        if (tabs.size() > 0 && !tabs.get(0).getText().equals("New plan"))
        {
            deleteActionPlan();
        }
    }

Кстати, по коду у вас два таба: <li class="tab0 selected" > и <li class="tab1 last" >.

Если вам нужно проверять именно первый - зачем ищите 'tab1'?


  • 1



Темы с аналогичным тегами if else, цикл, webdriver

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

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