Использование поля выбора с селеном

#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. Попробуйте сначала нажать на выпадающий список, а затем, как только параметры будут видны, также нажмите непосредственно на нужные параметры.

Пробная версия кода 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 вместо того, чтобы иметь новую строку только для этого!