【问题标题】:Selenium WebDriver - Unable to close select drop down menu in Chrome on Mac OS XSelenium WebDriver - 无法在 Mac OS X 上的 Chrome 中关闭选择下拉菜单
【发布时间】:2012-09-28 20:15:59
【问题描述】:

我已经使用 Selenium WebDriver 几个月了,我正在处理的 Web 应用程序中的下拉菜单出现问题。

正在发生的事情是测试正在打开页面,通过查找页面上的多个元素并确保它们显示来验证它们。 之后,在不同的字段中输入了一些文本,然后单击选项选择框以打开下拉菜单。 在此之后,测试会遍历下拉菜单中的所有选项,直到找到所需的选项,然后单击该选项。

此时该选项已被选中,但下拉菜单并未关闭。

我尝试再次单击选项选择,但这没有任何效果,在其余的测试期间,其他页面被导航到并且菜单没有关闭。

然后页面被保存,然后导航离开。 但是,下拉菜单会一直保留到浏览器关闭为止。

这是来自应用程序的代码:

<select id="options" name="options" class="options">
<option value="option1 (auto)">option1 (auto)</option>
<option value="option2">option2</option>
<option value="option3">option3</option>
</select>

【问题讨论】:

    标签: macos google-chrome selenium selenium-webdriver xpath


    【解决方案1】:

    我会尝试的第一个解决方案是以不同方式单击菜单选项。 Selenium API 为我们提供了这种可能性。 1)定位例如元素的 css 选择器。

    String cssOption1 = "select[id='options']>option[value='option1 (auto)']";
    String cssOption2 = "select[id='options']>option[value='option2']";
    String cssOption3 = "select[id='options']>option[value='option3']";
    

    也不要忘记验证您是否正确找到了元素,例如 .in firepath、ffox 中的 firebug 插件:

    接近 1

    driver.findElement(By.cssSelector(cssOption2)).click();
    

    方法 2 使用操作构建器 API

    WebElement mnuOptionElement;
    mnuOptionElement = driver.findElement(By.cssSelector(cssOption2));
    Actions builder = new Actions(driver);
    // Move cursor to the Main Menu Element
    builder.moveToElement(mnuOptionElement).click();
    

    更多关于 Actions builder 的信息你可以得到here

    方法 3 使用 jsExecutor 点击网页元素。在所有情况下都对我有用。

    JavascriptExecutor js = (JavascriptExecutor) driver;
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("var x = $(\'"+cssOption2+"\');");
            stringBuilder.append("x.click();");
            js.executeScript(stringBuilder.toString());
    

    希望这对你有用

    【讨论】:

    • 感谢您的回答,但是无论我如何单击下拉菜单,它都保持打开状态。我也尝试过不同的方法来单击选择以尝试关闭它,但是很遗憾,没有运气。
    • 你试过用javascript点击吗?这是我描述的第三个
    • 是的,我不知道 java 脚本,但我自己和同事尝试了 JQuery 和 javascript,但无济于事。我们总是能够打开投递箱,但我们永远无法关闭它,我们尝试发送按键和鼠标点击,但没有运气。再次感谢,
    • 嗯。似乎有点混乱。有兴趣知道它是特定于 webdriver 还是浏览器问题。你能从chrome切换到例如吗? ffox(或 safari)来调查它在另一个浏览器上的行为? stackoverflow.com/questions/9884840/…
    【解决方案2】:

    我已经解决了这个问题,因为这是我发现的唯一可行的方法。

    首先感谢 eugene.polschikov 的回答,虽然它没有解决问题,但它确实让我大开眼界,我对动作生成器一无所知,它给了我一些关于未来测试的好主意。 还要感谢所有阅读本文并思考可能的解决方案的人。

    现在的解决方法是不打开选择。 代码的工作方式是它会打开列表并找到它想要的并单击它,此时选择不会关闭,所以现在代码不再首先打开选择,它点击选择它的隐藏选项,不是我想要的 100%,但它有效。

    快乐编程, 本。

    【讨论】:

      【解决方案3】:

      如果人类可以按 Escape 退出组合框,您可以在 Selenium 中通过切换到活动元素来执行此操作:

          from selenium.webdriver.common.keys import Keys 
          element = driver.switch_to.active_element
          element.send_keys(Keys.ESCAPE)    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-18
        • 1970-01-01
        • 2011-11-05
        • 1970-01-01
        相关资源
        最近更新 更多