从“ div”下拉列表中选择元素-Selenium

时间:2019-05-27 16:00:07

标签: javascript java selenium selenium-webdriver

我有一个“ div”下拉列表,而不是“ select”。所以我的功能在所有地方都可以正常工作,除了不是从下拉按钮位置而是从上方打开的下拉菜单(因为下拉菜单位于页面底部)可以防止...页面滚动我猜?也许问题是打开的速度太快或太慢,所以函数通常单击的不是所需元素,而是最接近的元素之一。如果element不在下拉列表的开头,则通常以这种方式工作,因此将其滚动到该元素。有什么建议吗?

我发现的最好方法是使用动作,将移动分为元素并单击成两行(如果写成1行,效果会更差)。顺便说一句,“ waitVisibilityOfElement(By)”是一个具有webdriver等待预期条件的功能

public void selectFromDropdown(By by) {
        Log.debug("selecting from dropdown by" + by);
        waitVisibilityOfElement(by);
        Actions actions = new Actions(wrappedWebDriver);
       actions.moveToElement(wrappedWebDriver.findElement(by)).perform();
        Log.debug("clicking dropdown item");
        wrappedWebDriver.findElement(by).click();
}

我希望单击所需的元素,但通常会单击另一个

好的,在我的帮助下,我做出了最后的决定,这是选择下拉过滤器而不使用任何.sleep()函数的最佳方法,如果其他简单方法对您不起作用。

public void selectFromDropdown(By by) {
        Log.debug("selecting from dropdown by" + by);
        WebElement eleV = wrappedWebDriver.findElement(by);

        waitVisibilityOfElement(by);

        JavascriptExecutor js = (JavascriptExecutor) wrappedWebDriver;
        js.executeScript("arguments[0].scrollIntoView();", eleV);

        Actions actions = new Actions(wrappedWebDriver);
        actions.moveToElement(wrappedWebDriver.findElement(by)).perform();
        Log.debug("clicking dropdown item");
        wrappedWebDriver.findElement(by).click();
    }

3 个答案:

答案 0 :(得分:0)

您是否尝试过添加笛子等待时间? 那会有所帮助。 如果您可以在该问题中共享有关DOM的信息,那也很好吗? 这是Java的示例,但我认为这也可以在js中为您提供帮助。

Foo[] foos = Iterables.toArray(x, Foo.class);

答案 1 :(得分:0)

在将鼠标移到元素上并单击之前,您尝试过滚动到期望的元素值。希望以下代码可以提供帮助:

public void selectFromDropdown(By by) {
    Log.debug("selecting from dropdown by" + by);
    var eleValue = wrappedWebDriver.findElement(by);
    Log.debug("Scroll to element");
    browser.executeScript("arguments[0].scrollIntoView();", eleValue);
    waitVisibilityOfElement(by);
    Actions actions = new Actions(wrappedWebDriver);
    actions.moveToElement(eleValue).perform();
    Log.debug("clicking dropdown item");
    eleValue.click();
}

答案 2 :(得分:-1)

如果您尝试单击静态值,则可以直接从下拉列表中单击该值

您可以尝试

{{1}}