#java #selenium-webdriver #xpath
#java #selenium-webdriver #xpath
Вопрос:
Как обрабатывать несколько выпадающих списков?как сохранить его в списке веб-элементов
Select select=new Select(driver.findElement(By.xpath("//select[starts-with(@data-sor-id,'quo_sor_price_sor_id_')]")));
Если я напишу это, я получу список из 8 выпадающих списков.Когда я набираю этот xpath для сопоставления с элементами, я получаю это, когда я сопоставляю xpath с элементами в графическом интерфейсе
Я хочу обрабатывать эти выпадающие списки динамически, используя цикл, это изображения выпадающих списков, которые создаются во время выполнения
Ответ №1:
Если ваша цель — обработать выборки, возвращаемые указанным вами XPath, поможет ли что-то вроде этого?
List<WebElement> selects = driver.findElements(By.xpath("//select[starts-with(@data-sor-id,'quo_sor_price_sor_id_')]"));
for (WebElement we : selects) {
Select s = new Select(we);
// Do your stuff here
}
Или вам нужна специальная обработка для конкретных экземпляров?
Комментарии:
1. спасибо @kidney за ваш ответ. Я хочу выбрать первый выпадающий список и щелкнуть первый вариант, а затем выбрать второй выпадающий список и щелкнуть первый вариант и так далее. и для этого, если я напишу код s.selectByIndex(0); он не может выбрать какой-либо параметр и выдает элемент исключения, с которым невозможно взаимодействовать. Я где-то ошибаюсь? Заранее большое спасибо
2. Это трудно сказать, не зная страницы. Если сам выбор недоступен для взаимодействия, возможно, есть маска загрузки или что-то, покрывающее его. Вы можете попробовать добавить явное ожидание. Кроме того, если select имеет некоторые специальные функции на основе javascript, plain
selectByIndex
может не работать…3. мой опыт говорит о том, что в то время, когда код пытается указать на один элемент, он выдает не взаимодействующее исключение, но xpath возвращает более одного элемента, как я уже упоминал, он возвращает 8 элементов (8 выпадающих списков) i.stack.imgur.com/2IKxm.png .Но когда я выбираю конкретный идентификатор выпадающего списка и выбираюbyindex , это работает. например, выберите JT1=new Select(driver.findElement(By.xpath(«dd_surveySOR1_xpath=//select[@data-sor-id=’quo_sor_price_sor_id_1′]»))) ; JT1.selectByIndex(0);
4. Если бы это было текстовое поле или любой другой элемент, я мог бы получить его в списке веб-элементов и использовать эти элементы с индексным номером, например, List <WebElement> TextBoxes=driver.findElements(By.xpath(«//input[starts-with(@name,’quo_sor_unit_price_’)]»)); Текстовые поля.get(0).SendKeys(«xyz»); таким образом, будет выбрано первое текстовое поле. Могу ли я сделать то же самое со списком выпадающих списков. Заранее большое спасибо.
5. Я думаю, это должно быть возможно. Это в основном то, что делает мой пример кода — просматривает отдельные выборки и использует их. Так что вы можете попробовать и посмотреть…