Selenium Java从下拉菜单中选择

时间:2018-07-03 12:04:46

标签: java selenium selenium-webdriver drop-down-menu webdriver

我非常感谢已经发布了该问题的变体,但是,我已经阅读并尝试了这些帖子中的所有选项,但均未成功。我认为在我的情况下,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">&nbsp;</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.UPKeys.DOWN。但是,这些选项没有成功。

我真的很感激一个解决方案,该解决方案可以从下拉列表中选择仅以标签值开头的项目。也就是说,如果我要选择“ Saloon”,则不一定知道它的索引值为3。此外,下拉菜单中可以包含更多选项,需要在下拉菜单上进行滚动。

非常感谢

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 值。