java - 如何检查下拉菜单是否用硒展开
问题描述
我正在对移动网站进行自动化测试,但我在选择时遇到了问题(包含国家/地区列表)。
菜单是这样的:
<select id="depart" name="fromIsoCode" aria-controls="depart" aria-expanded="false">
<option value="xx">yyFullName</option>
<option value="yy">yyFullName</option>
</select>
重要提示:当单击菜单并且列表对用户“可见”时,属性“aria-expanded”变为“true”
我应该做的测试是检查一旦我们选择了一个值,列表就不再可见/显示。
我在以下代码中使用了一些东西进行测试:
By element = By.cssSelector("select#depart[aria-expanded=\"true\"]")
assertFalse(driver.findElement(element).isDisplayed());
问题是即使到达这些行时元素不存在,也isDisplayed()
返回true
在调试模式下,元素select#depart[aria-expanded=\"true\"]
不在页面的 DOM 中(但select#depart[aria-expanded=\"false\"]
在)
结果与isDisplayed()
我的预期相反:因为select#depart[aria-expanded=\"true\"]
它被认为是假的(我在 DOM 中没有元素,但它是真的,因为select#depart[aria-expanded=\"false\"]
它应该是真的(它在 DOM 中)但它是假的。 ..
我的第一个猜测是,这与我们之前选择了一些东西有关,但事实证明,不,即使检查是我在页面上做的第一件事,它也会失败。
第二个猜测是它要么是特定于选择元素的东西,和/或尝试使用select#depart[aria-expanded=\"true\"]
和select#depart[aria-expanded=\"false\"]
作为不同元素的问题,但我不知道如何处理它。
问题是:
- 如何检查是否使用 selenium/java 扩展了选择/下拉菜单?
- 为什么它没有按预期工作?
编辑 1 03/09/18
我试图测试“aria-expanded”值,它给出了相同的结果。当它应该是假的时候,我在 DOM 中认为它是假的,但是当在调试中查看它时,硒会变成“真”。
编辑 2 03/09/18
调试我注意到以下内容:如果我在“观察”我的变量之前“检查”我的浏览器,我在调试中得到的结果是好的......
调试正在暂停->我在“aria-expanded”上添加了一个手表,它给出了“true”(而不是预期的“false”)->我点击了我的浏览器/检查页面“aria-expanded”是“false” -> 我添加了第二个具有相同元素的手表或“刷新”第一个,我在“aria-expanded”(“false”)中得到了正确的值......增加等待时间没有任何作用......更多的子弹尝试一下,我会回来提供更多信息
编辑 3 03/09/18
问题不在于下拉菜单的状态。我的方式和 theGuy 都在“检查下拉菜单是否展开”(问题 1)
由于这是我接受盖伊回答的主要问题。
关于问题 2:这可能是一个值得自己提出问题的特定问题,我设法通过在选择中发送“制表键”暂时绕过它。这是一个“在紧急情况下”的修复,但我不想让整个问题悬而未决,我不想让人们至少没有线索。
解决方案
尝试:
By element = By.cssSelector("select#depart[aria-expanded='true']")
assertFalse(driver.findElement(element).isDisplayed());
这是您可以尝试的另一种解决方案:
// wait here after you have selected a value so element state is changed and selenium gets updated state. Thread.sleep(); would seem to work best in this case.
String text= driver.findElement(By.id("depart")).getAttribute("aria-expanded");
Assert.assertTrue(text=="false","Dropdown is not expanded");
推荐阅读
- java - 如何将字符串列表转换/拆分为要在 spark java 中的 sql 中使用的列
- spring - Spring Batch——一步使用两个数据源
- python - Python:在嵌套字典中选择键
- typescript - 为什么 TS 对待匿名对象和声明对象的方式不同?
- android - 为什么我的 Kotlin 代码中的访问令牌不起作用?
- javascript - 有没有更好的方法来使用 jQuery 将 html 文本框字符串格式更新为 HH:MM:SS
- javascript - 连接到猫鼬时,帖子不起作用
- r - 层次聚类 R 作为过滤变量
- javascript - 不能用玩笑来模拟 fetch()
- git - 在推送到远程 git repo 之前,有没有办法获取所有将被推送的文件的列表(不解析对 git status 的调用)?