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

Программирование на C# для тестировщиков
онлайн, начало 14 мая
Первый Онлайн ИНститут Тестировщиков
онлайн, начало 18 мая
SQL для тестировщиков
онлайн, начало 17 мая
Английский для тестировщиков
онлайн, начало 17 мая
Фотография

Как проверить что чекбокс выбран Webdriver Java


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

#1 kimandrew

kimandrew

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

  • Members
  • Pip
  • 32 сообщений
  • ФИО:Ким Андрей
  • Город:Калининград

Отправлено 18 июня 2013 - 08:34

Как проверить что чекбокс выбран Webdriver Java?

Есть два чекбокса со своими лэйблами.
Вот такой код в html
<input id="method_of_payment" type="radio" checked="checked" name="method_of_payment">
<label>first</label>
<input id="method_of_payment" type="radio" name="method_of_payment">
<label>second</label>

Изначально first уже отмечен. А second пустой.

Как сделать так, чтобы webdriver проверял, что именно один из них сейчас выбран?

Поиском пользовался, но не нашел нужного решения. Если оно уже есть, ткните пожалуйста носом.
  • 0

#2 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

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

1я ссылка "из гугла"
http://selftechy.com...ome-useful-apis
  • 1

#3 FibYar

FibYar

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

  • Members
  • Pip
  • 57 сообщений
  • ФИО:Большаков Виталий

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

Наиболее вероятно - вот так (возможно, что-то упустил, но суть, думаю, ясна):
List<WebElement> elems = null;
elems = driver.findElements(By.id("method_of_payment"));
Assert.assertTrue(elems.get(0).isSelected());
Assert.assertFalse(elems.get(1).isSelected());

  • 1

#4 S-Kerrigan

S-Kerrigan

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

  • Members
  • Pip
  • 5 сообщений
  • Город:Томск

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

Скрытый текст


public void TestInputCheckbox(){
        ((JavascriptExecutor) driver).executeScript(
                "var inputs = document.getElementsByTagName(\"input\");"+
                "for (var i = 0; i < inputs.length; i++){"+
                    "if (inputs[i].type == \"checkbox\"){"+
                        "inputs[i].checked=true;" +
                    "}"+
                "}"
        );
        
        String test = (String)((JavascriptExecutor) driver).executeScript(
                "var controlGroupAlpha;" +
                "var controlGroupBetta;" +
                "var inputs = document.getElementsByTagName(\"input\");"+
                "for (var i = 0; i < inputs.length; i++){"+
                    "if (inputs[i].type == \"checkbox\"){"+
                        "controlGroupAlpha = inputs[i].getAttribute(\"name\");" +
                        "controlGroupBetta = controlGroupBetta+\";\"+ controlGroupAlpha;"+
                    "}"+
                "}" +
                "return controlGroupBetta;"
        );
        Reporter.log("All checked : "+test);
    }

Это рабочий класс для Webdriver на JAVA. Он находит все чекбоксы на странице и отмечает их (Первый кусок кода), так же ищет все имена чекбоксов, формирует их список и выдает через логгер (Второй кусок кода... логгер от TestNG). Реализация через встраивание JS. Думаю тут вы уже спокойно разбиретесь ;)
  • 2
В прогрессе плохо лишь одно: за ним непременно будет регресс.

#5 kimandrew

kimandrew

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

  • Members
  • Pip
  • 32 сообщений
  • ФИО:Ким Андрей
  • Город:Калининград

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

Всем спасибо за быструю реакцию, в JAVA я слабоват, поэтому хочется какой-нибудь простецкий вариант.
По ссылке appmen предлагается сделать вот так
WebElement checkbox = a.findElement(By.id("method_of_payment"));
checkbox.click();
System.out.println(checkbox.isSelected());
При прогоне выдает true.
Меня смущает тот момент что 2 чекбокса и одинаковый id разные только лейблы.
Посему сей код всегда даст мне true.
Как можно этот момент допилить, чтобы в результате я мог проверить оба положения чекбокса.

Попробовал ваш класс, в результате тоже вижу только truе , а как сделать, чтобы выводился label выбранного элемента.

И сейчас у меня новая проблема.
На сайте если заполнять поля неверным вариантом, то выходит предупреждение, которое исчезает через 3 секунды.
Хочу проверить, что он появляется. Не могу его поймать, потому что идентификатор исчезает. Как его проверить?
  • 0

#6 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

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

if (checkbox1.isSelected){
какое-то действие или запись в лог (если просто запись в лог, то можно и стандартными средствами ЖЮнита, без if)
}else{
какое-то действие или запись в лог
}

if (checkbox2.isSelected){
какое-то действие или запись в лог (если просто запись в лог, то можно и стандартными средствами ЖЮнита, без if)
}else{
какое-то действие или запись в лог
}

Хочу проверить, что он появляется. Не могу его поймать, потому что идентификатор исчезает. Как его проверить?

Спросить у разработчиков. Как вариант посмотреть респонс от сервера. Я ищу по тексту обычно, хотя, возможно это неправильно
  • 1

#7 kimandrew

kimandrew

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

  • Members
  • Pip
  • 32 сообщений
  • ФИО:Ким Андрей
  • Город:Калининград

Отправлено 18 июня 2013 - 10:12

if (checkbox1.isSelected){
какое-то действие или запись в лог (если просто запись в лог, то можно и стандартными средствами ЖЮнита, без if)
}else{
какое-то действие или запись в лог
}

if (checkbox2.isSelected){
какое-то действие или запись в лог (если просто запись в лог, то можно и стандартными средствами ЖЮнита, без if)
}else{
какое-то действие или запись в лог
}


Хочу проверить, что он появляется. Не могу его поймать, потому что идентификатор исчезает. Как его проверить?

Спросить у разработчиков. Как вариант посмотреть респонс от сервера. Я ищу по тексту обычно, хотя, возможно это неправильно


Спасибо с чекбоксами разобрался. Не мог поймать нормальный xpath у каждого из чекбоксов, ловился у обоих одинаковый и поэтому не мог понять как их проверить отдельно.

Подскажите как быть с исчезающим текстом.
Я пробовал проверить что вообще текст появляется на странице, вот так

WebElement bodyTag = a.findElement(By.tagName("body"));
if (bodyTag.getText().contains("Field is incorrectly")) {
System.out.println("cool!");
}
else System.out.println("Bad!")

но webdriver этот текст не видит. Пробовал с другим тегом. в firebug показано, что исчезающий элемент написан в теге span. Но тоже безрезультатно.
Может как-то другим путем нужно идти?
  • 0

#8 S-Kerrigan

S-Kerrigan

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

  • Members
  • Pip
  • 5 сообщений
  • Город:Томск

Отправлено 18 июня 2013 - 10:19

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

Если я не прав, то можете кидать тухлыми помидорами :)

Затупил и не понял вашего нового вопроса... ссори.
  • 0
В прогрессе плохо лишь одно: за ним непременно будет регресс.

#9 Keiga

Keiga

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

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


Отправлено 18 июня 2013 - 10:24

Спасибо с чекбоксами разобрался. Не мог поймать нормальный xpath у каждого из чекбоксов, ловился у обоих одинаковый и поэтому не мог понять как их проверить отдельно.

Их надо объявлять как несколько элементов:
List<WebElement> elems = driver.findElements(By.id("method_of_payment"));
А потом проверять каждый элемент отдельно через:
Assert.assertTrue(elems.get(0).isSelected());
Assert.assertFalse(elems.get(1).isSelected());
Этот же код Вам писали выше.

Подскажите как быть с исчезающим текстом.
Я пробовал проверить что вообще текст появляется на странице, вот так


Текст исчезает или весь элемент?
Для начала найдите элемент и напишите локатор для него. После чего используйте ExpectedConditions
  • 1

#10 kimandrew

kimandrew

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

  • Members
  • Pip
  • 32 сообщений
  • ФИО:Ким Андрей
  • Город:Калининград

Отправлено 18 июня 2013 - 10:40

Спасибо с чекбоксами разобрался. Не мог поймать нормальный xpath у каждого из чекбоксов, ловился у обоих одинаковый и поэтому не мог понять как их проверить отдельно.

Их надо объявлять как несколько элементов:
List<WebElement> elems = driver.findElements(By.id("method_of_payment"));
А потом проверять каждый элемент отдельно через:
Assert.assertTrue(elems.get(0).isSelected());
Assert.assertFalse(elems.get(1).isSelected());
Этот же код Вам писали выше.

Подскажите как быть с исчезающим текстом.
Я пробовал проверить что вообще текст появляется на странице, вот так


Текст исчезает или весь элемент?
Для начала найдите элемент и напишите локатор для него. После чего используйте ExpectedConditions


В html он оформлен вот так <span class="account_form_info_false" id="cash_info" style="display: none;">Field is incorrectly</span>
Вводишь неправильные значения в поле, нажимаешь сабмит и выходит красная строчка Field is incorrectly прям рядом с полем. Через несколько секунд исчезает и в фаербаге становится неактивной, то есть, когда она отображена на странице, она есть в html теле. Как только исчезает текст, из html тела тэг тоже пропадает.

пробовал через findElement isDisplayed() не получается. и пробовал через getText() тоже безрезультатно.
  • 0

#11 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

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

та ну, isDisplayed в таких случаях помогает. Посмотрите, возможно ваш элемент находится в iframe. И перепишите поиск элемента, к примеру так:
driver.findElements(By.xpath("//span[@id='cash_info'] and contains(.,'Field is incorrectly')"));
и можно подключить к этому Экспектед Кондишн
  • 0

#12 kimandrew

kimandrew

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

  • Members
  • Pip
  • 32 сообщений
  • ФИО:Ким Андрей
  • Город:Калининград

Отправлено 19 июня 2013 - 08:00

та ну, isDisplayed в таких случаях помогает. Посмотрите, возможно ваш элемент находится в iframe. И перепишите поиск элемента, к примеру так:

driver.findElements(By.xpath("//span[@id='cash_info'] and contains(.,'Field is incorrectly')"));
и можно подключить к этому Экспектед Кондишн


К сожалению до сих пор не справился с ситуацией. Webdriver не видит элемент до сих пор.
Unable to locate element: {"method":"xpath","selector":"//form[@id='deposit_money_form']//span[.='Field is incorrectly']"}
Пробовал ставить задержку перед проверкой, но результат такой же.
  • 0

#13 Keiga

Keiga

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

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


Отправлено 19 июня 2013 - 08:45

К сожалению до сих пор не справился с ситуацией. Webdriver не видит элемент до сих пор.
Unable to locate element: {"method":"xpath","selector":"//form[@id='deposit_money_form']//span[.='Field is incorrectly']"}
Пробовал ставить задержку перед проверкой, но результат такой же.

Локатор проверяли? Вы WebDriverWait используете? Мне кажется тест должен выглядеть как-то так: ввели текст в поле, ждете пока появится надпись об ошибке, сохраняете элемент, проверяете через assert что текст элемента - "Field is incorrectly".
  • 0

#14 kimandrew

kimandrew

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

  • Members
  • Pip
  • 32 сообщений
  • ФИО:Ким Андрей
  • Город:Калининград

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


К сожалению до сих пор не справился с ситуацией. Webdriver не видит элемент до сих пор.
Unable to locate element: {"method":"xpath","selector":"//form[@id='deposit_money_form']//span[.='Field is incorrectly']"}
Пробовал ставить задержку перед проверкой, но результат такой же.

Локатор проверяли? Вы WebDriverWait используете? Мне кажется тест должен выглядеть как-то так: ввели текст в поле, ждете пока появится надпись об ошибке, сохраняете элемент, проверяете через assert что текст элемента - "Field is incorrectly".


я проверял вот так
a.findElement(By.xpath("//form[@id='deposit_money_form']//span[.='Field is incorrectly']")).isDisplayed();
и задержку ставил вот так
a.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
Пробовал разные локаторы для определения, но ни один не нашелся.
Насчет текста элемента, мне кажется что если он через isDisplayed() его не находит, то и текст забрать не сможет. А изначально я так и хотел сделать.
Сейчас же хочу проверить что элемент хотя бы отображается.
  • 0

#15 Keiga

Keiga

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

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


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

я проверял вот так
a.findElement(By.xpath("//form[@id='deposit_money_form']//span[.='Field is incorrectly']")).isDisplayed();
и задержку ставил вот так
a.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
Пробовал разные локаторы для определения, но ни один не нашелся.
Насчет текста элемента, мне кажется что если он через isDisplayed() его не находит, то и текст забрать не сможет. А изначально я так и хотел сделать.
Сейчас же хочу проверить что элемент хотя бы отображается.

Вы говорили что сообщение отображается какое-то время. Откройте страницу в firefox, включите firebug, дождитесь сообщения и введи в поле свой локатор. Выделится ли область с текстом?

a.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
1 секунды может быть мало. Ставьте 5 или 10.
Вот Вы ввели текст. Далее Вы ждете элемента(тут нужно или через просто findelement и implicityWait или через expectedconditions), дождались, получили его текст и сверили его с эталоном, потом в идеале дождались что сообщение пропало.

Начните с того что проверьте правильность локатора и что он ведёт именно на тот элемент который Вы проверяете.
  • 0


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



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

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

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