我已经与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>
我尝试的第一个解决方案是以不同的方式点击菜单选项。 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());
希望这对你有用
我通过解决方法解决了这个问题,因为这是我找到工作的唯一方法。
首先,谢谢你eugene.polschikov的答案,虽然它没有解决它确实让我睁大眼睛的问题,我不知道行动建设者,它给了我一些关于未来测试的好主意。也感谢任何阅读此内容并思考可能的解决方案的人。
现在的解决方法是不打开选择。代码的工作方式是打开列表并找到它想要的那个并点击它,此时select不会关闭,所以现在代码不再打开select,它点击了选择它的隐藏选项,不是100%我想要的,但它的工作原理。
快乐编程,本。
如果人类可以按Escape退出组合框,您可以通过切换到活动元素在Selenium中执行此操作:
from selenium.webdriver.common.keys import Keys
element = driver.switch_to.active_element
element.send_keys(Keys.ESCAPE)