Selenium—使用Java单击下拉列表并选择一个值

Selenium—使用Java单击下拉列表并选择一个值,java,selenium,html.dropdownlistfor,Java,Selenium,Html.dropdownlistfor,我正在尝试连续自动下载大量指标。到目前为止,通过脚本,我可以打开URL、登录、切换选项卡,并转到所需的部分。我有一个问题,点击下拉菜单,选择一个值,将列表从10扩展到100 这是到目前为止我的代码 SoltraDownload.java SoltraHomePage.java 这里是html代码的一个子集-我希望在下拉列表中选择值100 <div class="row control-bar"> <div class="col-sm-4"></div> &

我正在尝试连续自动下载大量指标。到目前为止,通过脚本,我可以打开URL、登录、切换选项卡,并转到所需的部分。我有一个问题,点击下拉菜单,选择一个值,将列表从10扩展到100

这是到目前为止我的代码

SoltraDownload.java

SoltraHomePage.java

这里是html代码的一个子集-我希望在下拉列表中选择值100

<div class="row control-bar">

<div class="col-sm-4"></div>

<div class="col-sm-4">

<ul class="pager">

<li class="previous"><input type="button" class="btn btn-default" data-    bind="click: goFirst, disable: page()==1" value="&lt;&lt;"></li>

<li class="previous"><input type="button" class="btn btn-default" data-  bind="click: goPrev, disable: page()==1" value="&lt;"></li>

<li><small data-bind="text: page"></small> of <small data-bind="text: totalPages"></small> (<small data-bind="text: totalRows"></small>

<small data-bind="if: totalRows()!==1">rows</small><small data-bind="if: totalRows()==1">row</small>)</small></li>

<li class="next"><button class="btn btn-default" data-bind="click: goNext, disable: page() == totalPages()">&gt;</button></li>

<li class="next"><button class="btn btn-default" data-bind="click: goLast, disable: page() == totalPages()">&gt;&gt;</button></li>

</ul>
</div>
    <div class="col-sm-4">
    <ul class="pager">
        <li class="pull-right"><small>Indicators per page: </small>
            <select data-bind="value: pageSize, event: { change: loadData }" style="width:auto">
                <option value="5">5</option>
                <option value="10">10</option>
                <option value="20">20</option>
                <option value="50">50</option>
                **<option value="100">100</option>** //This is the value I am looking to choose
        </select>
    </li>
</ul>

  • 的( rowsrow)
    每页的指示器: 5. 10 20 50 **100**//这是我希望选择的值

由于value属性与text具有相同的值,我建议使用以下css选择器以获得更好的搜索结果

String val = "100";
By css = By.cssSelector("select>option[value='" + val + "']");
driver.findElement(css).click();

另一方面,您可以使用
selectByValue
方法来完成相同的任务,而不是可视化文本。请参见

我始终创建一个自定义操作类,并将它们放在其中:

public static void selectByValue(WebElement element, String value) {
    Select selectElement = new Select(element);
    selectElement.selectByValue(value);
}
public static void selectByText(WebElement element, String text) {
    Select selectElement = new Select(element);
    selectElement.selectByVisibleText(text);
}
这些方法获取您的WebElement,将其转换为Select元素(org.openqa.selenium.support.ui.Select),并使用Select方法选择您的选项。这仅适用于html选择元素。您可以这样使用它:

在顶部:

@FindBy(how = How.CSS, using = "li.pull-right select") private WebElement soltraSelect;
在测试中:

CustomActions.selectByValue(soltraSelect, "100");

您可以使用选择对象或定义正确的XPath:

1) 使用选择:

Select element = new Select(webelement);
element.selectByValue(value);
2) 使用XPath:

By option = By.xpath("//select[@class = 'expression']/option[@value = 'value']");
driver.findElement(option).click();

您是否遇到任何异常,如元素不可见或未找到..没有错误Madhan,我只是无法使其工作。您确定此时下拉列表可见亲爱的匿名downvoter,请指定downvote的原因。
Select element = new Select(webelement);
element.selectByValue(value);
By option = By.xpath("//select[@class = 'expression']/option[@value = 'value']");
driver.findElement(option).click();