我非常感谢已经发布了该问题的变体,但是,我已经阅读并尝试了这些帖子中的所有选项,但均未成功。我认为在我的情况下,HTML内有些东西阻止解决方案正常工作,特别是css类ui-helper-hidden-accessible
。
以下是我的HTML
<div id="myform:selectCharacteristic" class="ui-selectonemenu ui-widget ui-state-default ui-corner-all">
<div class="ui-helper-hidden-accessible">
<input id="myform:selectCharacteristic_focus" type="text" autocomplete="off" role="combobox" aria-haspopup="true" aria-expanded="false" />
</div>
<div class="ui-helper-hidden-accessible">
<select id="myform:selectCharacteristic_input" tabindex="-1" data-p-con="javax.faces.Integer" data-p-hl="onemenu">
<option value="1">Hatchback</option>
<option value="2">Estate</option>
<option value="3">Saloon</option>
</select>
</div>
<label id="myform:selectCharacteristic_label" class="ui-selectonemenu-label ui-inputfield ui-corner-all"> </label>
<div class="ui-selectonemenu-trigger ui-state-default ui-corner-right">
<span class="ui-icon ui-icon-triangle-1-s ui-c"></span>
</div>
<div id="myform:selectCharacteristic_panel" class="ui-selectonemenu-panel ui-widget ui-widget-content ui-corner-all ui-helper-hidden ui-shadow">
<div class="ui-selectonemenu-items-wrapper" style="height:200px">
<ul id="myform:selectCharacteristic_items" class="ui-selectonemenu-items ui-selectonemenu-list ui-widget-content ui-widget ui-corner-all ui-helper-reset" role="listbox">
<li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data-label="Hatchback" tabindex="-1" role="option">Hatchback</li>
<li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data-label="Estate" tabindex="-1" role="option">Estate</li>
<li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data-label="Saloon" tabindex="-1" role="option">Saloon</li>
</ul>
</div>
</div>
我尝试了很多事情,包括
org.openqa.selenium.support.ui.Select.selectByIndex()
和org.openqa.selenium.support.ui.Select.selectByVisibleText()
尝试使用操作执行一次点击,然后发送Keys.UP
和Keys.DOWN
。但是,这些选项没有成功。
我真的很感激一个解决方案,该解决方案可以从下拉列表中选择仅以标签值开头的项目。也就是说,如果我要选择“ Saloon”,则不一定知道它的索引值为3。此外,下拉菜单中可以包含更多选项,需要在下拉菜单上进行滚动。
非常感谢
答案 0 :(得分:1)
https://prnt.sc/k227pf 在这种情况下,无法使用硒中的“选择”功能,因为JSF会覆盖基本选择功能,因此您需要为选择下拉菜单项编写自己的方法。http://prntscr.com/k22c9v 可能是这样的:
`
//xpath_for_element_that_can_open_dropdown
@FindBy(xpath = "//div[contains(@class, 'ui-selectonemenu-trigger')]/span")
private WebElement SELECT_CORNER;
//xpath_for_all_elements_indropdownlist
@FindBy(xpath = "//div[@class='ui-selectonemenu-items-wrapper']//li")
private List<WebElement> DROPDORN_LIST_ELEMENTS;
public void selectSomeOption(String dropdownItemToBeSelected){
SELECT_CORNER.click();
for (WebElement dropdownListElement : DROPDORN_LIST_ELEMENTS) {
if (dropdownItemToBeSelected.equals(dropdownListElement.getText())){
dropdownListElement.click();
break;
}
}
}
`
答案 1 :(得分:0)
根据HTML,您提供的选项掀背车,房屋和轿车似乎是<li>
个项目。要选择 Saloon ,您可以使用以下解决方案:
driver.findElement(By.xpath("//input[@id='myform:selectCharacteristic_focus']")).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//ul[@class='ui-selectonemenu-items ui-selectonemenu-list ui-widget-content ui-widget ui-corner-all ui-helper-reset' and @id='myform:selectCharacteristic_items']//li[@class='ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all' and @data-label='Saloon']"))).click();
答案 2 :(得分:-1)
我试过了,它工作正常。
System.setProperty("webdriver.chrome.driver", "chromedriver");
driver = new ChromeDriver();
driver.get("file:///Desktop/test.html");
Thread.sleep(1000);
Select dropdown = new Select(driver.findElement(By.id("myform:selectCharacteristic_input")));
dropdown.selectByVisibleText("Saloon");
Thread.sleep(1000);
此代码是从下拉列表中选择 Saloon 值。