【问题标题】:How to get elements from dropdown when input type is not ' select' in selenium webdriver当 selenium webdriver 中的输入类型不是“选择”时如何从下拉列表中获取元素
【发布时间】:2017-08-12 16:00:44
【问题描述】:

我有一个带有 javascript 功能的按钮来显示下拉项目,而不是通常的选择框。我需要提取此下拉列表中列出的所有项目并导出到 exel 表。以下按钮下列出的项目属于“复选框”类型。我正在使用 selenium webdriver。 这是 HTML 代码:

<input  id="selServicesBtn"  value="SELECT OPTION" onclick=" checkBoxDisp();" type="button">
<i class="fa fa-filter" id="FilterIcon"></i>
<div name="chkToggleWindow" id="chkToggleWindow" class="chkToggleWindow" style="display: block;"> 
    <div name="checkboxTagEnclosed" class="checkboxTagEnclosed"
id="checkboxTagEnclosed"> 
        <table name="checkboxTag" class="chkbxtag" cellpadding="3" cellspacing="0" border="0" onchange=" checkOnchange();">
            <tbody>
                <tr>
                    <td>
                        <input id="checkBox_00" type="checkbox" value="OPTION1" cellpadding="3" cellspacing="0" border="0" _bst_unchecked="false" name="checkboxTag" onchange=" checkOnchange();">
                        <label for="checkBox_00">OPTION1</label>
                    </td>
                </tr>
                <tr>
                    <td>
                        <input id="checkBox_01" type="checkbox" value="OPTION2" cellpadding="3" cellspacing="0" border="0" _bst_unchecked="false" name="checkboxTag" onchange=" checkOnchange();">
                        <label for="checkBox_01">OPTION2</label>
                    </td>
                </tr>
            </tbody>
        </table> 
    </div> 
</div>

这是我尝试过的:`

WebElement table_element = driver.findElement(By.name("checkboxTagEnclosed"));
List<WebElement> tr_collection=table_element.findElements(By.xpath("//*[@id='checkboxTagEnclosed']/table/tbody/tr"));

System.out.println("NUMBER OF ROWS IN THIS TABLE = "+tr_collection.size());
int row_num,col_num;
row_num=0;
for(WebElement trElement : tr_collection)
{
    List<WebElement> td_collection=trElement.findElements(By.xpath("td"));
    System.out.println("NUMBER OF COLUMNS="+td_collection.size());
    col_num=0;
    for(WebElement tdElement : td_collection)
    {
        System.out.println("row # "+row_num+", col # "+col_num+ "text="+tdElement.getText());
        col_num++;
    }
    row_num++;
}

我正在获取行数和列数,但文本为空。

无法获取下拉菜单的内容。请帮忙。

【问题讨论】:

  • 所以你想要文本中的选项 1 和选项 2?
  • 是的。我想要文本中的 option1 和 option2
  • 请告诉我是否必须使用除 xpath 之外的完全不同的方法
  • 不应该是标签名“td”而不是xpath? List td_collection=trElement.findElements(By.xpath("td"));
  • Shank 有道理。 List&lt;WebElement&gt; td_collection=trElement.findElements(By.xpath("td")); 应该是 List td_collection=trElement.findElements(By.tagname("td"));

标签: javascript jquery html selenium


【解决方案1】:

尝试替换

List<WebElement> td_collection=trElement.findElements(By.xpath("td"));

List<WebElement> td_collection=trElement.findElements(By.tagName("td"));

【讨论】:

    【解决方案2】:

    试试这个方法。

    List<WebElement> dropdpwn = driver.findElements(By.xpath("//div[@id='checkboxTagEnclosed']/table[@class='chkbxtag']/..‌​//following::input[@‌​type='checkbox']"));   // Using list web-element get all web-elements.
    System.out.println(dropdpwn.size());              
    
    for(int i = 0; i<dropdpwn.size(); i++)           
    {
       System.out.println(dropdpwn.get(i).getAttribute("value"));   //Using for loop getting one by one dropdown name using value attribute.
       Thread.sleep(2500);                          //wait for 2.5 seconds
    }
    

    【讨论】:

    • 是的,我尝试了代码...它正在工作!!!我得到了我想要的结果,但有一个问题。我也从页面中的其他复选框中获得了结果。如何过滤掉?
    • 好的,那么你需要修改你的xpath,这样不会影响同一页面中的另一个checkboxes
    • 如果解决了您的问题,请将此答案标记为Accepted
    • 我给 xpath 作为: By.xpath("//*[@id='checkboxTagEnclosed']input[@type='checkbox']");它不工作。你能告诉我如何为 div checkboxTagEnclosed 选择所有复选框提供正确的 xpath
    • 它不工作。当我给出这个 xpath 时,我将下拉大小设为 0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多