6

我已经使用 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>
4

3 回答 3

2

我已经通过变通解决了这个问题,因为这是我发现工作的唯一方法。

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

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

快乐编程,本。

于 2012-10-10T08:09:13.627 回答
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']";

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

方法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();

有关操作生成器的更多信息,您可以在此处获取

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

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

希望这对你有用

于 2012-10-08T16:25:15.090 回答
2

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

    from selenium.webdriver.common.keys import Keys 
    element = driver.switch_to.active_element
    element.send_keys(Keys.ESCAPE)    
于 2017-12-19T23:29:38.943 回答