【问题标题】:In Autocomplete bar how to click the specific value under div ul li strong在 Autocomplete bar 如何点击 div ul li strong 下的具体值
【发布时间】:2016-04-13 20:21:47
【问题描述】:

我在divul 下有很多li 标签。每个li标签由strong标签组成:

<div style="width:380px" id="autoComplete" class="suggest fl">
    <div class="sWrap">
        <div class="iconWrap">
            <span class="nLoder" style="display: none;"></span>
        </div>
        <div>
            <input type="text" autocomplete="off" placeholder="Search" class="" id="keywords1" style="width:375px;" name="KEYWORDS">
       </div>
    </div>
    <div class="sugCont nScroll " id="sugDrp_autoComplete" style="display: none; width: 380px;">
        <ul class="Sdrop">
            <li class="sugTouple">
                <button style="width:100%" class="Sbtn  " tabindex="-1" type="button">
                    Acc
                    <strong>ounting</strong>
                </button>
            </li>
            <li class="sugTouple">
                <button style="width:100%" class="Sbtn" tabindex="-1" type="button">
                    Acc
                    <strong>ounts Payable</strong>
                </button>
            </li>
            <li class="sugTouple">
                <button style="width:100%" class="Sbtn" tabindex="-1" type="button">
                    Acc
                    <strong>ounts Receivable</strong>
                </button>
            </li>
            <li class="sugTouple">
                <button style="width:100%" class="Sbtn" tabindex="-1" type="button">
                    Acc
                    <strong>ount Management</strong>
                </button>
            </li>
        </ul>
    </div>
</div>

我当前的代码:

List<WebElement> optionsToSelect = driver.findElements(By.xpath("//ul[@class='Sdrop']"));
for (WebElement option : optionsToSelect) {
    System.out.println(option);
    if (option.getText().equals(textToSelect)) {
        System.out.println("Trying to select: "+textToSelect);
        option.click();
        break;
    }
}

如何选择值?我缺少一些东西,请引导我到达。

【问题讨论】:

    标签: java html selenium xpath selenium-webdriver


    【解决方案1】:

    您应该数 li 然后开始循环并检查此处的按钮文本是否已更新代码。

    List<WebElement> optionsToSelect =  driver.findElements(By.xpath("//div[@id='sugDrp_autoComplete']/ul[@class='Sdrop']/li"));
    for (WebElement option : optionsToSelect) {
    
       WebElement buttonObj = option.findElement(By.tagName("button"))
       if (buttonObj.getText().equals(textToSelect)) {
           System.out.println("Trying to select: "+textToSelect);
           buttonObj .click();
           break;
       }
     }
    

    【讨论】:

    • 感谢您的回复。在 optionsToSelect 中没有存储任何内容。我检查了 System.out.println("size"+optionsToSelect.size());
    • 我更新了代码,另外请确保您上面的html代码不在任何框架中,如果有任何框架则需要先选择
    • 不,它不在任何框架下。仍然相同的结果大小是“零”
    • 我已经更新了 HTML 代码。一开始就添加了一些东西
    • 现在直接传递像 driver.findElement(By.id("keywords1")).sendKeys("Accounting"); 这样的值在那个自动完成框中我可以添加多个值,如会计、管理、会计部门等,
    【解决方案2】:

    您可以使用 xpath 直接单击按钮:

    //button[@class='Sbtn' and text()='textToSelect']
    

    【讨论】:

    • 非常感谢您的回复。使用您提到的 xpath,驱动程序无法找到它。无法定位元素:{"method":"xpath","selector":"//button[@class='Sbtn' and text()='Accounting']"} 命令持续时间或超时:231 毫秒
    • 这可能与空格有关。尝试使用 normalize-space()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    相关资源
    最近更新 更多