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

Фотография

Выпадающие списки Slenium WebDriver


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

#1 kimandrew

kimandrew

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

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

Отправлено 29 декабря 2012 - 07:33

Всем привет.

Встала такая задача, протестировать сайт с обьявлениями.
Протестировать именно добавление обьявлений.

При создании обьявления, есть выбор подраздела в выпадающем списке А(туризм, транспорт,хобби и т.д.). Далее после выбора в выпадающем списке А появляется второй выпадающий список Б (продам куплю обменяю и т.д.)
нужно воспроизвести последовательность.
Переход на 1 раздел выпадающего списка А, далее в списке Б поочередно пройти по каждой категории.
Переход на 2 раздел списка А, далее в списке Б поочередно по каждой категории.
Переход на 3 раздел списка А, далее в списке Б поочередно по каждой категории.
и т.д по всем категориям.

Количество категорий в каждом списке неизвестно, можно посчитать вручную, но слишком много считать.
Не могу сделать цикл выбора и не могу найти метод который выдаст количество опций выпадающего списка.
Я новичок, использую для тестирования Selenium WebDriver + Java.
Знатоки, прошу Вашей помощи в решении проблемы.
  • 0

#2 user12

user12

    Специалист

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


Отправлено 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
и добавляем объявление
}

}
вот и вся задача :)
  • 1

#3 ali179s

ali179s

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

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Анастасия Суходола

Отправлено 14 февраля 2016 - 15:15

Привет!  Я новичок.

У меня вот тоже вопрос по выпадающим спискам.

Есть задача добавить нового пользователя. У пользователя могут быть роли администратора, слушателя, куратора. Я добавляю пользователей с разными ролями. Изначально выбрана роль слушателя, мне нужно поменять на администратора.Я записываю свои действия с помощью Selenium IDE. И форматирую в java/testng

Есть классы parameters, в которые задаю значения полей и locators, в котором задаю путь к элементу
 
   WebElement name=driver.findElement(Locators.fieldName);
   name.clear();
   name. sendKeys(Parameters.name);
   WebElement email=driver.findElement(Locators.fieldEmail);
   email.clear();
   email. sendKeys(Parameters.email);
   С этой частью проблем не возникают.
 
А вот в этом ошибка:
   // ERROR: Caught exception [ERROR: Unsupported command [removeSelection | id=roles | label=Слушатель]]
   // ERROR: Caught exception [ERROR: Unsupported command [addSelection | id=roles | label=Администратор]]
Пробовала такой вариант:
 
  WebElement roleAdmin = driver.findElement(Locators.optionRoleAdmin); // находим веб-элемент
   Select select = new Select(roleAdmin); 
 
Ошибка такая:
org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "option"
 
Помогите исправить
 

  • 0

#4 user12

user12

    Специалист

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


Отправлено 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"

 

 

Ну , ошибка

Элемент должен был "select", но был "option"
Что тебе не понятно ?

  • 0

#5 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 16 февраля 2016 - 10:04

WebElement roleAdmin = driver.findElement(Locators.optionRoleAdmin); // находим веб-элемент
Select select = new Select(roleAdmin); 

Во-первых, как уже сказано выше, если хотите именно через Select, то вместо "roleAdmin" у вас всегда должен быть сам селект.

Во-вторых, new Select(что-то) это самое "что-то" не выбирает. Оно лишь создает новый объект класса Select (также как строчка выше создает объект класса WebElement, но с ним самим ничего не делает).

Вам необходимо уже после того, как вы определили Select - выбирать нужную опцию одним из методов этого класса.

Например, select.selectOption("опция") (по видимому или значению, не по локатору).


  • 0

#6 ali179s

ali179s

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

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Анастасия Суходола

Отправлено 18 февраля 2016 - 04:29

спасибо! я вот так попробовала:
 
WebElement roleUser = driver.findElement(Locators.optionRoleUser);// нахожу веб-элемент
   Select select = new Select(roleUser);//переопределяю 
  select.deselectByVisibleText("Слушатель"); //снимаю выбор элемента по видимому тексту
WebElement roleAdmin = driver.findElement(Locators.optionRoleAdmin);// нахожу веб-элемент Admin
   Select select1 = new Select(roleAdmin);//переопределяю 
  select1.selectByVisibleText("Администратор"); //выбираю элемент по видимому тексту
 
все равно ошибка: org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "option"
 
<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>
 
есть вот такой метод:
 public List<WebElement> getAllSelectedOptions() – возвращает все выбранные пункты списка;
и я вот так пробовала:
  List <WebElement> roleAdmin = (List<WebElement>) driver.findElement(Locators.optionRoleUser);
  Select select1 = new Select((WebElement) roleAdmin);
   select1.getAllSelectedOptions();
однако и здесь ошибка

  • 0

#7 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 18 февраля 2016 - 06:45

WebElement Selectbox_roles = driver.findElement(By.id("roles");
Select select1 = new Select(Selectbox_roles);
select1.selectByVisibleText("Администратор");

ты определеляешь не сам селектбокс(элемент, из которого выбирать значения) , а его значение(option)


  • 0

#8 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 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);

  • 0

#9 DennisM

DennisM

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

  • Members
  • Pip
  • 55 сообщений
  • ФИО:Dennis M
  • Город:Ralegh NC, USA

Отправлено 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


  • 0

#10 ali179s

ali179s

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

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Анастасия Суходола

Отправлено 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);

СПАСИБО БОЛЬШОЕ!!! получилось!


  • 0

#11 ali179s

ali179s

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

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Анастасия Суходола

Отправлено 19 февраля 2016 - 04:06

WebElement Selectbox_roles = driver.findElement(By.id("roles");
Select select1 = new Select(Selectbox_roles);
select1.selectByVisibleText("Администратор");

ты определеляешь не сам селектбокс(элемент, из которого выбирать значения) , а его значение(option)

 

СПАСИБО ВАМ БОЛЬШОЕ!!  у меня получилось!


  • 0

#12 WaveLW

WaveLW

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Захаров Александр Анатольевич


Отправлено 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

http://toolsqa.com/s...e-hover-action/

http://www.guru99.co...-webdriver.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();


  • 0

#13 NatalieHvozdyk

NatalieHvozdyk

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

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Гвоздик Наталия Игоревна

Отправлено 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 гостей, 0 анонимных