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

Техники локализации плавающих дефектов
онлайн, начало 19 апреля
Тестирование безопасности
онлайн, начало 21 апреля
Тестирование мобильных приложений
онлайн, начало 21 апреля
Автоматизатор мобильных приложений
онлайн, начало 21 апреля
Фотография

Написать цикл: пока кнопка видна - нажимать

цикл в тестах

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

#1 marinel

marinel

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

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


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

Всем добрый день.

Подскажите, пожалуйста, как написать цикл для следующего теста.

 

приложение позволяет создать не более 10 полей при помощи кнопки.

Думаю о том, что бы написать цикл, где будет нажиматься кнопка до тех пор, пока она не исчезнет.

В доступных примерах дается инициализация в виде счетчика, как это можно применить к кнопке?

 

Заранее спасибо.


  • 0

#2 Vad1m198

Vad1m198

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

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Вадим


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

Ну если нажимать пока не исчезнет, то как то так

 

WebElement el = driver.findElementBy....

 

while(el.isDisplayed())

   el.click();


  • 0

#3 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 854 сообщений
  • ФИО:Виктор
  • Город:Минск


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

Думаю о том, что бы написать цикл, где будет нажиматься кнопка до тех пор, пока она не исчезнет.

 

 

while(el.isDisplayed())

   el.click();

 

 

 

Вот только никогда нельзя делать так.

А если кнопка никогда не исчезнет и ты получишь бесконечный цикл !


  • 0

#4 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 854 сообщений
  • ФИО:Виктор
  • Город:Минск


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

private static final int MAX_COUMT_CLICK_BUTTON = 10;



-----

    int i = 0;
        while(el.isDisplayed()) {
            if (MAX_COUMT_CLICK_BUTTON == i) {
                log.error("Click " + MAX_COUMT_CLICK_BUTTON+ " and the button is visible");
                break;
            }
            i++;
              el.click();
        }

  • 0

#5 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

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

private static final int MAX_COUNT_CLICK_BUTTON = 10;

for (var i=1; i<=MAX_COUNT_CLICK_BUTTON ; i++)
{
    if (el.isDisplayed()) el.Click();
    Assert.IsFalse(el.isDisplayed(), "Кнопка исчезла после совершения " + i + " кликов");
}
Assert.IsTrue(el.isDisplayed(), "Кнопка не исчезла после совершения " + MAX_COUNT_CLICK_BUTTON + " кликов");

  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#6 marinel

marinel

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

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


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

Ребята, спасибо вам огромное  :victory:


  • 0

#7 elvis

elvis

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

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 24 сентября 2015 - 18:53

извините за глупый вопрос - а зачем вам это? Я так понимаю кнопка не нажимается сразу и вы жёстко жмёте её до посинения, пока не отработает onclick ?


  • 0

#8 breakmt

breakmt

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

  • Members
  • Pip
  • 22 сообщений
  • Город:Санкт-Петербург

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

private static final int MAX_COUNT_CLICK_BUTTON = 10;

for (var i=1; i<=MAX_COUNT_CLICK_BUTTON ; i++)
{
    if (el.isDisplayed()) el.Click();
    Assert.IsFalse(el.isDisplayed(), "Кнопка исчезла после совершения " + i + " кликов");
}
Assert.IsTrue(el.isDisplayed(), "Кнопка не исчезла после совершения " + MAX_COUNT_CLICK_BUTTON + " кликов");

Помоему у вас после первой же итерации цикла вылетит ошибка проверки, т.к. кнопка исчезает только после 10го клика, а вы проверяете сразу после первого


  • 0

#9 marinel

marinel

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

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


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

Все бы хорошо. Да приложение на аяксе и дело усложняют ожидание.

я так понимаю, что цикл не успевает дождаться появление кнопки, решает, что ее нет и заканчивается.

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

 

for (int second = 0;; second++) {
if (second >= 60) fail("timeout");
try { if ("Disable administration".equals(driver.findElement(By.id("administration")).getText())) break; } catch (Exception e) {}
Thread.sleep(1000);
}
 
Заранее спасибо

  • 0

#10 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 25 сентября 2015 - 06:48

Помоему у вас после первой же итерации цикла вылетит ошибка проверки, т.к. кнопка исчезает только после 10го клика, а вы проверяете сразу после первого

Вы правы, перепутал местами IsTrue и IsFalse :)

private static final int MAX_COUNT_CLICK_BUTTON = 10;

for (var i=1; i<=MAX_COUNT_CLICK_BUTTON ; i++)
{
    if (el.isDisplayed()) el.Click();
    Assert.IsTrue(el.isDisplayed(), "Кнопка исчезла после совершения " + i + " кликов");
}
Assert.IsFalse(el.isDisplayed(), "Кнопка не исчезла после совершения " + MAX_COUNT_CLICK_BUTTON + " кликов");

  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#11 breakmt

breakmt

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

  • Members
  • Pip
  • 22 сообщений
  • Город:Санкт-Петербург

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

 

Все бы хорошо. Да приложение на аяксе и дело усложняют ожидание.

я так понимаю, что цикл не успевает дождаться появление кнопки, решает, что ее нет и заканчивается.

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

 

for (int second = 0;; second++) {
if (second >= 60) fail("timeout");
try { if ("Disable administration".equals(driver.findElement(By.id("administration")).getText())) break; } catch (Exception e) {}
Thread.sleep(1000);
}
 
Заранее спасибо

 

 

Это неправильное решение, потому что вы используете sleep, что считается плохой практикой. Почитайте про явные и неявные ожидания, например, вот здесь

Еще рекомендую почитать про selenide - в нем многие проблемы и вопросы (в том числе с ожиданиями) уже решены и вам не нужно будет тратить силы и нервы на изобретение велосипеда.


  • 0

#12 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 854 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 25 сентября 2015 - 08:20

2 marinel

Я перестал понимать, как работает ваше приложение.

Думал что

 

Думаю о том, что бы написать цикл, где будет нажиматься кнопка до тех пор, пока она не исчезнет.

 

 просто кликешь на кнопку N раз и она исчезает

Теперь же

цикл не успевает дождаться появление кнопки, решает, что ее нет и заканчивается.

 

Т..е кликнули на кнопку она исчезла, когда появилась - кликнули еще раз (опять исчезла и появилась), на N-ый клик - они исчезла и не появилась ?

Или же открыли страницу, а кнопка еще не появилась, т.е. мы в ПЕРВЫЙ раз хотим нажать на кнопку, а её нет ?

По коду:

1)if (second >= 60)

60 сделайте константой

2) Не используйте пустые

catch (Exception e) {
    }


  • 0

#13 marinel

marinel

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

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


Отправлено 25 сентября 2015 - 09:32

Виктор, приложение работает так:

есть кнопка "Новое поле" при нажатии на нее, появляется новое поле.

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


  • 0

#14 Snap

Snap

    Специалист

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


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

 

Думаю о том, что бы написать цикл, где будет нажиматься кнопка до тех пор, пока она не исчезнет.

 

while(el.isDisplayed())

   el.click();

 

Вот только никогда нельзя делать так.

А если кнопка никогда не исчезнет и ты получишь бесконечный цикл !

Так это же был просто шаблон, остальное автор додумает (счетчики и т.п.).


  • 0

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


#15 elvis

elvis

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

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 25 сентября 2015 - 12:58

1. нажимаем кнопку
2. ждём пока не появится новое поле (ожидание ExpectedConditions)
3. повторяем цикл 9 раз
4. проверяем что кнопка исчезла.
 


  • 0

#16 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 817 сообщений


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

Предвижу следующий вопрос: а где вы взяли такой полезный и интересный метод .isDisplayed() ? )))


  • 1

#17 marinel

marinel

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

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


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

Всем огромное спасибо!

Получилось решить задачу таким образом:

 

public void createNewMeasure() throws InterruptedException {
for (int x = 0; x < 9; x++){
driver.findElement(By.name("newMeasure")).click();
waitFor();
}
}
 
:victory:

  • 0

#18 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

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

Всем огромное спасибо!
Получилось решить задачу таким образом:
 
public void createNewMeasure() throws InterruptedException {
for (int x = 0; x < 9; x++){
driver.findElement(By.name("newMeasure")).click();
waitFor();
}
}
 
:victory:


а в waitFor() что находится?) опять sleep?)
  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©



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



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

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

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