Выпадающие списки Slenium WebDriver
#1
Отправлено 29 декабря 2012 - 07:33
Встала такая задача, протестировать сайт с обьявлениями.
Протестировать именно добавление обьявлений.
При создании обьявления, есть выбор подраздела в выпадающем списке А(туризм, транспорт,хобби и т.д.). Далее после выбора в выпадающем списке А появляется второй выпадающий список Б (продам куплю обменяю и т.д.)
нужно воспроизвести последовательность.
Переход на 1 раздел выпадающего списка А, далее в списке Б поочередно пройти по каждой категории.
Переход на 2 раздел списка А, далее в списке Б поочередно по каждой категории.
Переход на 3 раздел списка А, далее в списке Б поочередно по каждой категории.
и т.д по всем категориям.
Количество категорий в каждом списке неизвестно, можно посчитать вручную, но слишком много считать.
Не могу сделать цикл выбора и не могу найти метод который выдаст количество опций выпадающего списка.
Я новичок, использую для тестирования Selenium WebDriver + Java.
Знатоки, прошу Вашей помощи в решении проблемы.
#2
Отправлено 03 января 2013 - 07:04
List<WebElement> countA= driver.findElements(By.XXXX);
countA.size() - количество элементов в списке А
Ну и надо объявить 2 примитивных цикла
for (int i=0; i<countA.size(); i++) {
//выбрать i-ый элемент
//теперь цикл по списку B
for (int j=0; j<countB.size(); j++) {
тут выбираем подряд элементы из списка B
и добавляем объявление
}
}
вот и вся задача :)
#3
Отправлено 14 февраля 2016 - 15:15
Привет! Я новичок.
У меня вот тоже вопрос по выпадающим спискам.
Есть задача добавить нового пользователя. У пользователя могут быть роли администратора, слушателя, куратора. Я добавляю пользователей с разными ролями. Изначально выбрана роль слушателя, мне нужно поменять на администратора.Я записываю свои действия с помощью Selenium IDE. И форматирую в java/testng
#4
Отправлено 15 февраля 2016 - 08:06
// ERROR: Caught exception [ERROR: Unsupported command [removeSelection | id=roles | label=Слушатель]]// ERROR: Caught exception [ERROR: Unsupported command [addSelection | id=roles | label=Администратор]]
Не все команды Selenium IDE можно конвертировать программно. Так что придется делать вручную, копи-пастом не получится
org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "option"
Ну , ошибка
#5
Отправлено 16 февраля 2016 - 10:04
WebElement roleAdmin = driver.findElement(Locators.optionRoleAdmin); // находим веб-элемент Select select = new Select(roleAdmin);
Во-первых, как уже сказано выше, если хотите именно через Select, то вместо "roleAdmin" у вас всегда должен быть сам селект.
Во-вторых, new Select(что-то) это самое "что-то" не выбирает. Оно лишь создает новый объект класса Select (также как строчка выше создает объект класса WebElement, но с ним самим ничего не делает).
Вам необходимо уже после того, как вы определили Select - выбирать нужную опцию одним из методов этого класса.
Например, select.selectOption("опция") (по видимому или значению, не по локатору).
#6
Отправлено 18 февраля 2016 - 04:29
#7
Отправлено 18 февраля 2016 - 06:45
WebElement Selectbox_roles = driver.findElement(By.id("roles"); Select select1 = new Select(Selectbox_roles); select1.selectByVisibleText("Администратор");
ты определеляешь не сам селектбокс(элемент, из которого выбирать значения) , а его значение(option)
#8
Отправлено 18 февраля 2016 - 07:03
<select id="roles" class="form-control" multiple="" required="" name="role"> <option selected="" value="ROLE_LEARNER">Слушатель</option> <option value="ROLE_KURATOR">Куратор</option> <option value="ROLE_ADMIN">Администратор</option> </select>
String selectCssLocator = "#roles";
Select select = new Select(driver.findElement(By.cssLocator(selectCssLocator)));
select.selectByValue("ROLE_KURATOR") - выберет роль "Куратор".
select.selectByVisibleText("Администратор") - выберет роль "Администратор".
Т.е. в первом приведенном вами варианте, в первых двух строчках
Заменить WebElement roleUser = driver.findElement(Locators.optionRoleUser);// нахожу веб-элемент Select select = new Select(roleUser);//переопределяю На WebElement roleSelect = driver.findElement(Locators.selectRoleLocator); // тут локатор самого селекта, а не нужной роли Select select = new Select(roleSelect);
#9
Отправлено 18 февраля 2016 - 14:52
Бывает что на странице элементы не Select и не могут инициализироваться пока не выпадут из меню. В селениуме есть Actions.
Webelement menu= driver.findElement(By.xpath("//div[@class='меню.Иконка из которой всё выпадает']/a")); //меню. Иконка из которой всё выпадает
Actions mouse = new Actions(driver);
//Двигаем мышь на меню и зависаем над ним. Меню вываливается.
mouse.moveToElement(menu).build().perform();
//mouse.moveToElement(menu).click().build().perform(); - если надо кликнуть а не висеть над меню
//Кликаем по опции из списка.
Webelement item= driver.findElement(By.xpath("//div[@class='Элемент меню из списка']/a")); //Элемент меню из списка
mouse.moveToElement(item).click().build().perform();
//или тут уже сам Webdriver может найти и кликнуть
//item.click();
Подробнее:
https://selenium.goo...ns/Actions.html
http://toolsqa.com/s...e-hover-action/
http://www.guru99.co...-webdriver.html
#10
Отправлено 19 февраля 2016 - 04:04
<select id="roles" class="form-control" multiple="" required="" name="role"> <option selected="" value="ROLE_LEARNER">Слушатель</option> <option value="ROLE_KURATOR">Куратор</option> <option value="ROLE_ADMIN">Администратор</option> </select>
String selectCssLocator = "#roles";
Select select = new Select(driver.findElement(By.cssLocator(selectCssLocator)));
select.selectByValue("ROLE_KURATOR") - выберет роль "Куратор".
select.selectByVisibleText("Администратор") - выберет роль "Администратор".
Т.е. в первом приведенном вами варианте, в первых двух строчках
Заменить WebElement roleUser = driver.findElement(Locators.optionRoleUser);// нахожу веб-элемент Select select = new Select(roleUser);//переопределяю На WebElement roleSelect = driver.findElement(Locators.selectRoleLocator); // тут локатор самого селекта, а не нужной роли Select select = new Select(roleSelect);
СПАСИБО БОЛЬШОЕ!!! получилось!
#11
Отправлено 19 февраля 2016 - 04:06
WebElement Selectbox_roles = driver.findElement(By.id("roles"); Select select1 = new Select(Selectbox_roles); select1.selectByVisibleText("Администратор");ты определеляешь не сам селектбокс(элемент, из которого выбирать значения) , а его значение(option)
СПАСИБО ВАМ БОЛЬШОЕ!! у меня получилось!
#12
Отправлено 18 апреля 2016 - 06:58
Бывает что на странице элементы не Select и не могут инициализироваться пока не выпадут из меню. В селениуме есть Actions.
Webelement menu= driver.findElement(By.xpath("//div[@class='меню.Иконка из которой всё выпадает']/a")); //меню. Иконка из которой всё выпадает
Actions mouse = new Actions(driver);
//Двигаем мышь на меню и зависаем над ним. Меню вываливается.
mouse.moveToElement(menu).build().perform();//mouse.moveToElement(menu).click().build().perform(); - если надо кликнуть а не висеть над меню
//Кликаем по опции из списка.
Webelement item= driver.findElement(By.xpath("//div[@class='Элемент меню из списка']/a")); //Элемент меню из списка
mouse.moveToElement(item).click().build().perform();
//или тут уже сам Webdriver может найти и кликнуть
//item.click();
Подробнее:
https://selenium.goo...ns/Actions.html
Спасибо :) хорошие ссылки :)
долго мучался и перепробовал несколько способов... не получалось(ну получалось через раз) пока не обратил внимание на доп окно, которое чуть-чуть перекрывало мои ссылки. я их видел частично а Java нет. Сделал закрытие окна. и все заработало :)
остановился на таком варианте :
Actions actions = new Actions(driver);
WebElement menu = driver.findElement(By.xpath(".//*[@id='main-menu']...............")); // указываем соответственно xpath к кнопке меню
WebElement elementInMenu= driver.findElement(By.xpath(".//*[@id='main-menu']/.....")); // указываем соответственно xpath к пункту меню
actions.moveToElement(menu).moveToElement(elementInMenu).click().build().perform();
#13
Отправлено 25 апреля 2016 - 13:12
Помогите, пожалуйста:
Есть выпадающий список для ввода имени, при вводе первых букв выпадают варианты. Как последовательно нажать на все пункты в этом списке?
driver.find_element_by_css_selector("body > div.header > div.container > div.row.first_line > div.col-480-4.col-xs-3.col-sm-3.col-md-3.col-lg-3.lh_normal > a > div").click()
driver.find_element_by_link_text(u"Поиск по имени").click()
driver.find_element_by_name("name").clear()
driver.find_element_by_name("name").send_keys(u"А")
if "autocomplete-suggestions" in driver.page_source:
print "yes"
kol = driver.find_elements_by_class_name("autocomplete-suggestion")
print len(kol)
print kol
l = len(kol)
for i in range(0, l, 1):
driver.find_elements_by_css_selector("body > div.autocomplete-suggestions.autocomplete_input_name_dropdown").click()
time.sleep(1)
driver.find_element_by_css_selector("#find_name > button.tab_button").click()
time.sleep(1)
assert "" in driver.page_source
driver.find_element_by_css_selector("body > div.header > div.container > div.row.first_line > div.col-480-4.col-xs-3.col-sm-3.col-md-3.col-lg-3.lh_normal > a > div").click()
driver.find_element_by_link_text(u"Поиск по имени").click()
driver.find_element_by_name("name").clear()
driver.find_element_by_name("name").send_keys(u"А")
Я сделала так, проходит цикл правильное кол-во раз, но только для одного пункта списка.
body > div.autocomplete-suggestions.autocomplete_input_name_dropdown > div:nth-child(1) - селектор для элемента в выпадающем списке.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных