Как проверить что чекбокс выбран Webdriver Java
#1
Отправлено 18 июня 2013 - 08:34
Есть два чекбокса со своими лэйблами.
Вот такой код в 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 проверял, что именно один из них сейчас выбран?
Поиском пользовался, но не нашел нужного решения. Если оно уже есть, ткните пожалуйста носом.
#3
Отправлено 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());
#4
Отправлено 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. Думаю тут вы уже спокойно разбиретесь ;)
#5
Отправлено 18 июня 2013 - 09:48
По ссылке appmen предлагается сделать вот так
WebElement checkbox = a.findElement(By.id("method_of_payment"));
checkbox.click();
System.out.println(checkbox.isSelected());
При прогоне выдает true.
Меня смущает тот момент что 2 чекбокса и одинаковый id разные только лейблы.
Посему сей код всегда даст мне true.
Как можно этот момент допилить, чтобы в результате я мог проверить оба положения чекбокса.
Попробовал ваш класс, в результате тоже вижу только truе , а как сделать, чтобы выводился label выбранного элемента.
И сейчас у меня новая проблема.
На сайте если заполнять поля неверным вариантом, то выходит предупреждение, которое исчезает через 3 секунды.
Хочу проверить, что он появляется. Не могу его поймать, потому что идентификатор исчезает. Как его проверить?
#6
Отправлено 18 июня 2013 - 09:58
какое-то действие или запись в лог (если просто запись в лог, то можно и стандартными средствами ЖЮнита, без if)
}else{
какое-то действие или запись в лог
}
if (checkbox2.isSelected){
какое-то действие или запись в лог (если просто запись в лог, то можно и стандартными средствами ЖЮнита, без if)
}else{
какое-то действие или запись в лог
}
Спросить у разработчиков. Как вариант посмотреть респонс от сервера. Я ищу по тексту обычно, хотя, возможно это неправильноХочу проверить, что он появляется. Не могу его поймать, потому что идентификатор исчезает. Как его проверить?
#7
Отправлено 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. Но тоже безрезультатно.
Может как-то другим путем нужно идти?
#8
Отправлено 18 июня 2013 - 10:19
Затупил и не понял вашего нового вопроса... ссори.
#9
Отправлено 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
#10
Отправлено 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() тоже безрезультатно.
#11
Отправлено 18 июня 2013 - 11:01
driver.findElements(By.xpath("//span[@id='cash_info'] and contains(.,'Field is incorrectly')"));и можно подключить к этому Экспектед Кондишн
#12
Отправлено 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']"}
Пробовал ставить задержку перед проверкой, но результат такой же.
#13
Отправлено 19 июня 2013 - 08:45
Локатор проверяли? Вы WebDriverWait используете? Мне кажется тест должен выглядеть как-то так: ввели текст в поле, ждете пока появится надпись об ошибке, сохраняете элемент, проверяете через assert что текст элемента - "Field is incorrectly".К сожалению до сих пор не справился с ситуацией. Webdriver не видит элемент до сих пор.
Unable to locate element: {"method":"xpath","selector":"//form[@id='deposit_money_form']//span[.='Field is incorrectly']"}
Пробовал ставить задержку перед проверкой, но результат такой же.
#14
Отправлено 19 июня 2013 - 09:00
Локатор проверяли? Вы WebDriverWait используете? Мне кажется тест должен выглядеть как-то так: ввели текст в поле, ждете пока появится надпись об ошибке, сохраняете элемент, проверяете через assert что текст элемента - "Field is incorrectly".
К сожалению до сих пор не справился с ситуацией. Webdriver не видит элемент до сих пор.
Unable to locate element: {"method":"xpath","selector":"//form[@id='deposit_money_form']//span[.='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() его не находит, то и текст забрать не сможет. А изначально я так и хотел сделать.
Сейчас же хочу проверить что элемент хотя бы отображается.
#15
Отправлено 19 июня 2013 - 10:07
Вы говорили что сообщение отображается какое-то время. Откройте страницу в firefox, включите firebug, дождитесь сообщения и введи в поле свой локатор. Выделится ли область с текстом?я проверял вот так
a.findElement(By.xpath("//form[@id='deposit_money_form']//span[.='Field is incorrectly']")).isDisplayed();
и задержку ставил вот так
a.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
Пробовал разные локаторы для определения, но ни один не нашелся.
Насчет текста элемента, мне кажется что если он через isDisplayed() его не находит, то и текст забрать не сможет. А изначально я так и хотел сделать.
Сейчас же хочу проверить что элемент хотя бы отображается.
a.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);1 секунды может быть мало. Ставьте 5 или 10.
Вот Вы ввели текст. Далее Вы ждете элемента(тут нужно или через просто findelement и implicityWait или через expectedconditions), дождались, получили его текст и сверили его с эталоном, потом в идеале дождались что сообщение пропало.
Начните с того что проверьте правильность локатора и что он ведёт именно на тот элемент который Вы проверяете.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных