Selenium WebDriver - 无法在Mac OS X上关闭Chrome中的选择下拉菜单

问题描述 投票:6回答:3

我已经与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
3个回答
2
投票

我尝试的第一个解决方案是以不同的方式点击菜单选项。 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']";

另外,不要忘记验证您是否正确找到了元素,例如在ffox中的firepath,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();

有关动作生成器的更多信息,您可以获得here

方法3使用jsExecutor单击web元素。在所有情况下始终适合我。

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

希望这对你有用


1
投票

我通过解决方法解决了这个问题,因为这是我找到工作的唯一方法。

首先,谢谢你eugene.polschikov的答案,虽然它没有解决它确实让我睁大眼睛的问题,我不知道行动建设者,它给了我一些关于未来测试的好主意。也感谢任何阅读此内容并思考可能的解决方案的人。

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

快乐编程,本。


0
投票

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

    from selenium.webdriver.common.keys import Keys 
    element = driver.switch_to.active_element
    element.send_keys(Keys.ESCAPE)    
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.