selenium selectByVisibleText работает некорректно

#selenium #xpath #webdriver

#selenium #xpath #webdriver

Вопрос:

Я пытался выбрать опцию ‘float’ из следующего списка выбора:

 <select id="pt1:tabs:ruleDictEditorTab:r2:bsets_ddc:iter:0:bse_dc:bse1:dtype::content" class="x2h" title="int" name="pt1:tabs:ruleDictEditorTab:r2:bsets_ddc:iter:0:bse_dc:bse1:dtype" _afrfoc="y1404280666174">
    <option value="0" title="String">String</option>
    <option selected="" value="1" title="int">int</option>
    <option value="2" title="double">double</option>
    <option value="3" title="char">char</option>
    <option value="4" title="byte">byte</option>
    <option value="5" title="short">short</option>
    <option value="6" title="long">long</option>
    <option value="7" title="float">float</option>
    <option value="8" title="Date">Date</option>
    <option value="9" title="Time">Time</option>
    <option value="10" title="DateTime">DateTime</option>
</select>
  

Мой код selenium:

 Select typeSelect = new Select(driver.findElement("//select"));
typeSelect.selectByVisibleText("float");
  

при запуске я увидел, что select на секунду изменился на ‘float’, но он сразу же вернулся к опции ‘int’ по умолчанию. Кто-нибудь сталкивался с подобной проблемой раньше? как это решить?

Ответ №1:

Вероятно, какой-то JavaScript предотвращает его изменение подобным образом. Вам придется использовать click() для изменения значения. Что-то вроде этого:

 driver.findElement(By.xpath("//select")).click();
driver.findElement(By.xpath("//option[text()='float']")).click();
  

Также смотрите Этот пост для альтернативного способа сделать это.

Ответ №2:

Попробуйте с приведенной ниже логикой

 new Select(driver.findElement(By.cssSelector("select[id*='ruleDictEditorTab']"))).selectByVisibleText("float");
  

или

 driver.findElement(By.cssSelector("select[id*='ruleDictEditorTab']")).findElement(By.cssSelector("option[title='float']")).click();