#selenium #selenium-webdriver
Вопрос:
Я пытаюсь найти подходящий способ для Selenium выбрать элемент в a select-box
.
Я пробовал использовать:
new Select(driver.findElement(By.xpath("//select-box[@name='countryCode']"))).selectByVisibleText(country);
но получите ожидаемую ошибку:
org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "select-box"
Попытка использовать WebElement
отлично подходит для выбора элемента, но не позволяет «искать» результаты в правильном списке элементов.
Это HTML, с которым я работаю, который я немного упростил:
<select-box name="type" options="$ctrl.ClubTypes"
track-by="value" label-by="label" required="">
<div class="SelectBox">
<div>
<div></div>
<input readonly="" class="Input " type="text" value="Club">
</div>
<ul class="SelectBox-options ng-scope" ng-if="$ctrl.isShowingOptions" style="">
<li>Country list items</li>
</ul>
</div>
</select-box>
Я довольно новичок в использовании Селена и программировании в целом, поэтому любая помощь была бы фантастической.
Ответ №1:
Вместо
new Select(driver.findElement(By.xpath("//select-box[@name='countryCode']"))).selectByVisibleText(country);
Просто попробуй
String contry = "IRAN";
driver.findElement(By.xpath("//div[@class='SelectBox']")).findElement(By.xpath(".//li[contains(text(),'" country "')]"))
Комментарии:
1. Спасибо вам за это! Действует очаровательно!
Ответ №2:
Это исключение
org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "select-box"
в основном это означает, что вы пытаетесь использовать Select
класс from Selenium
(который предназначен исключительно для drop downs
встроенного использования Select
и option
тегов).
Если вы обратите внимание на HTML, которым вы поделились, вместо этого его нет Select
select-box
Решение :
- Попробуйте сначала нажать на выпадающий список, а затем, как только параметры будут видны, также нажмите непосредственно на нужные параметры.
Пробная версия кода 1 :
Thread.sleep(5);
driver.findElement(By.xpath("//select-box[@name='countryCode']")).click();
Пробная версия кода 2 :
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//select-box[@name='countryCode']"))).click();
используйте любой из них, и он щелкнет по выпадающему списку, а затем вы сможете аналогичным образом выбрать желаемый вариант.
Мне нужно было бы outerHTML
сначала увидеть, чтобы найти надежный локатор, чтобы click
включить option
его .
Комментарии:
1. Спасибо за это, Приятно знать, что я могу включить a
wait
вместо того, чтобы иметь новую строку только для этого!