Как щелкнуть раскрывающийся список и выбрать вариант через Selenium и Java?

Я пытаюсь нажать кнопку раскрывающегося списка, код успешно запущен, но кнопка раскрывающегося списка не была нажата в селене.

<select id = "comp_drpdwn" data-select-id = "f41d68e6-38b3-19cc-c392-3c9fc33690e8" class = "initialized">
   <option value = "0">Select Company</option>
   <option value = "Acme~54sc234xb">Acme</option>
   <option value = "Acme Bar &amp; Grill~TI17267302">Acme Bar &amp; Grill</option>
   <option value = "Ball &amp; Chain~TI58377308">Ball &amp; Chain</option>

мой код:

WebElement element = driver.findElement(By.xpath(".//*[@id='comp_drpdwn']"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();

Как насчет предоставления контекста? Не зная структуры веб-страницы, никто не может сказать, имеет ли ваш xpath смысл или нет.

Roland Weber 07.06.2018 08:28

Можете ли вы поделиться URL-адресом веб-приложения?

Buaban 07.06.2018 08:37

@Buaban, как я могу поделиться URL-адресом и учетными данными?

Saravanan 07.06.2018 09:26

@Saravanan просто добавьте их в свой вопрос. если это проприетарное программное обеспечение, вы можете поделиться большим количеством HTML. Я думаю, это не простой элемент выбора.

Buaban 07.06.2018 09:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
1 593
3

Ответы 3

Это выбранный тег. Вы можете использовать Select класс селена.

Например, чтобы выбрать опцию Acme, попробуйте следующий код.

WebElement element = driver.findElement(By.xpath(".//*[@id='comp_drpdwn']"));
Select sel = new Select(element);
sel.selectByVisibleText("Acme");

Я пытаюсь выполнить приведенный выше код, но отображается ошибка, например: org.openqa.selenium.ElementNotVisibleException: элемент не отображается: элемент в настоящее время не отображается и не может быть изменен (Информация о сеансе: chrome = 67.0.3396.62) (Информация о драйвере: chromedriver = 2.39 .562718

Saravanan 07.06.2018 08:55

Возможно, вам придется дождаться видимости элемента.

Murthi 07.06.2018 08:56

При наведении указателя мыши на элемент отображается HTML-код: <input type = "text" class = "select-dropdown" readonly = "true" data-activates = "select-options-f41d68e6-38b3-19cc-c392-3c9fc‌ 33690e8 "value = " R3PORTS, INC ">

Saravanan 07.06.2018 08:56

это мой последний код: WebDriverWait wait = new WebDriverWait (driver, 10); WebElement element = wait.until (ExpectedConditions.visibilityOfElementLocated (By.‌ xpath ("// input [@ value = 'R3PORTS, INC']"))); WebElement element1234 = driver.findElement (By.xpath ("// input [@ value = 'R3PORTS, INC']")); element1234.click ();

Saravanan 07.06.2018 09:14

отображается ошибка: отображается ошибка: org.openqa.selenium.WebDriverException: неизвестная ошибка: элемент <input type = "text" class = "select-dropdown" readonly = "true" data-activates = "select-options-47eb660d- 70d8-548b-7bfc-7d3d6‌ 1d319b2 "value = " R3PORTS, INC "> не активен в точке (223, 28). Другой элемент получит щелчок:

Saravanan 07.06.2018 09:16

Это должно работать:

WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='comp_drpdwn']"))); 
Select select = new Select(element);
select.selectByVisibleText("Acme");

Подход @Murthi был в значительной степени правильным. Поскольку этот элемент является элементом <select>, вы должны использовать экземпляр класса Select. Но похоже, что свойство значение и VisibleText тегов option содержит динамический текст (например, ~54sc234xb) и специальные символы (например, &amp;). Поэтому я хотел бы использовать метод selectByIndex(int index) следующим образом:

WebElement elem = driver.findElement(By.xpath("//select[@class='initialized' and @id='comp_drpdwn'][@data-select-id]"));
Select select = new Select(elem);
select.selectByIndex(1);

В приведенном выше коде отображается ошибка, например: org.openqa.selenium.ElementNotVisibleException: элемент не отображается: элемент в настоящее время не отображается и не может быть изменен

Saravanan 07.06.2018 17:17

@Saravanan Можете ли вы обновить вопрос, добавив немного внешнего HTML-кода выбранного узла?

DebanjanB 07.06.2018 18:17

Другие вопросы по теме