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

Фотография

Как проверить что чекбокс выбран 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


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

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