Добрый день, подскажите, пожалуйста с циклом условием IF
В приложении создаются документы и размещаются во вкладках.
Нухно написать цикл условие, если первая вкладка не называется "New plan", то этот документ удалить.
я пишу
Отправлено 29 сентября 2015 - 14:45
Добрый день, подскажите, пожалуйста с циклом условием IF
В приложении создаются документы и размещаются во вкладках.
Нухно написать цикл условие, если первая вкладка не называется "New plan", то этот документ удалить.
я пишу
Отправлено 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()
Отправлено 29 сентября 2015 - 15:04
цикл это for, while ...
тебе нужно что то типа этого
и перебирать там элементы по их номеру
i=0 while ... By.xpath("//ul/li/a/span[i++]").getText()
предварительно подсчитав кол-во всех подобных элементов (что бы цикл не упал из за того, что такого элемента не существует)
Отправлено 29 сентября 2015 - 15:13
Таким образом тоже не работает, как надо
Отправлено 29 сентября 2015 - 15:16
цикл это for, while ...
тебе нужно что то типа этого
и перебирать там элементы по их номеру
i=0 while ... By.xpath("//ul/li/a/span[i++]").getText()предварительно подсчитав кол-во всех подобных элементов (что бы цикл не упал из за того, что такого элемента не существует)
Да, правда, Олег. Я говорю об условии... Мне нужно именно условие, выполняющееся для одной вкладки, все остальные последующие вкладки. меня в этом тесте не интересуют
Отправлено 29 сентября 2015 - 15:22
цикл это for, while ...
тебе нужно что то типа этого
и перебирать там элементы по их номеру
i=0 while ... By.xpath("//ul/li/a/span[i++]").getText()предварительно подсчитав кол-во всех подобных элементов (что бы цикл не упал из за того, что такого элемента не существует)
Да, правда, Олег. Я говорю об условии... Мне нужно именно условие, выполняющееся для одной вкладки, все остальные последующие вкладки. меня в этом тесте не интересуют
кинь HTML сюда
Отправлено 29 сентября 2015 - 15:31
А разве разумно использовать ветвление в тестах?
Насколько я помню, они должны быть линейными.
Использование if, while - это должны быть исключительные ситуации.
Отправлено 29 сентября 2015 - 15:38
Отправлено 29 сентября 2015 - 15:38
А разве разумно использовать ветвление в тестах?
Насколько я помню, они должны быть линейными.
Использование if, while - это должны быть исключительные ситуации.
А как же тогда проверить?
Отправлено 29 сентября 2015 - 15:43
xpath
//ul/li[2]/a/span
или
//ul/li[contains(@class,'tab1')]/a/span
Отправлено 29 сентября 2015 - 15:43
Может кто-то со мной не согласится, но после тестового сценария должен быть 1 ожидаемый результат.
Чем больше логики закладываете в тесты, тем сложнее их будет поддерживать.
Отправлено 29 сентября 2015 - 15:56
xpath
//ul/li[2]/a/spanили
//ul/li[contains(@class,'tab1')]/a/span
ну вот у меня так в первом варианте
Отправлено 29 сентября 2015 - 16:07
Отправлено 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'?
0 пользователей, 0 гостей, 0 анонимных