【问题标题】:Selenium:Not able to read text of a dropdown with autocomplete=offSelenium:无法通过 autocomplete=off 读取下拉列表的文本
【发布时间】:2015-12-22 06:51:16
【问题描述】:

Selenium 无法获取选项内的文本。

我正在写的一段代码是:

WebElement dropdown=driver.findElement(By.id("selFromAccount"));
List<WebElement> dropoptions=dropdown.findElements(By.tagName("option"));
for(int i=0;i<dropoptions.size();i++)
{
    System.out.println("Text is "+ dropoptions.get(i).getText());
}   
System.out.println(dropoptions.size());

HTML 是:

<div class=" autocomplete autocomplete-select">
    <select id="selFromAccount" class="ddlsize392 payer-dd loading_input" onchange="changeAjaxAccount(true)" size="1" name="LABEL_NBMAIN_selFromAccount" style="display: none;">
        <option value="-1">Please select a From Account</option>
        <option value="RO56RNCB0318055807340005">Current Account-RO56RNCB0318055807340005-1,49 AUD-false</option>
        <option value="RO59RNCB0187055807340002">Current Account-RO59RNCB0187055807340002-0,53 EUR-false</option>
    </select>
    <input class="input-text search-icon ui-autocomplete-input" type="text" name="LABEL_NBMAIN_selFromAccount_autocomplete" placeholder="Please select a From Account" style="width: 356px; padding-right: 18px;" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true"/>
    <a class="show-values" tabindex="-1">
        <span/>
    </a>
</div>

输出是:

文字是 文字是 文字是 3

它正在计数,但无法打印值。

我需要测试值“请从帐户中选择”,然后需要从下拉列表中选择值。请帮助。

【问题讨论】:

  • 您要选择一个特定的项目还是只打印所有值?

标签: jquery html css selenium autocomplete


【解决方案1】:

使用下面的代码:-

WebElement dropdown=driver.findElement(By.id("selFromAccount"));
List<WebElement> dropoptions=dropdown.findElements(By.tagName("option"));
java.util.Iterator<WebElement> i = dropoptions.iterator();
while(i.hasNext()) {
    WebElement row = i.next();
    System.out.println(row.getText());
}

【讨论】:

    【解决方案2】:

    我自己设置并运行了它,得到的结果和你一样。似乎发生了什么是 style="display: none;"由于未显示选择,导致 getText 不返回任何文本。 dropoptions.get(i).getAttribute("text") 在这种情况下有效,但更大的问题是选择不显示,因此无法与之交互。此选择是否通过页面上的其他操作可见?如果没有,您可以使用 javascript 使其可见:

    WebElement dropdown=driver.findElement(By.id("selFromAccount"));
    
    // Use javascript to display the select, should something on the page trigger displaying of the select?
    JavascriptExecutor js = (JavascriptExecutor) driver;
    String jsHighlight = "document.getElementById(\"selFromAccount\").style.display=\"block\"";
    js.executeScript(jsHighlight, dropdown);
    
    List<WebElement> dropoptions=dropdown.findElements(By.tagName("option"));
    for(int i=0;i<dropoptions.size();i++)
    {
        // getAttribute("Text") can get the hidden text, but displaying the select is needed to select an option.
        System.out.println(dropoptions.get(i).getAttribute("text"));
        if ("Please select a From Account".equals(dropoptions.get(i).getText())) {
            dropoptions.get(i).click();
        }
    }
    System.out.println(dropoptions.size());
    

    【讨论】:

    • 非常感谢..使用Javascript代码启用后它可以工作。
    • @aanchalsuri 很高兴听到!也许您会接受这个答案,因为它解决了您的问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 2015-12-02
    相关资源
    最近更新 更多