java - 如何检查下拉菜单是否用 Selenium 扩展

标签 java selenium drop-down-menu

我正在对移动网站进行自动化测试,但在选择(包含国家/地区列表)时遇到问题。

菜单是这样的:

<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

在 Debug模式下,元素 select#depart[aria-expanded=\"true\"] 不在页面的 DOM 中(但 select#depart[aria-expanded =\"false\"] 是)

isDisplayed() 的结果与我的预期相反: 对于 select#depart[aria-expanded=\"true\"] ,它应该是 false (我在 DOM 中没有该元素,但它是 true,对于 select#depart [aria-expanded=\"false\"] 它应该是 true (它在 DOM 中)但它是 false...

我的第一个猜测是,这与我们之前选择的内容有关,但事实证明不是,即使检查是我在页面上执行的第一件事,它也会失败。

第二个猜测是,它要么是 select 元素特有的,和/或尝试使用 select#depart[aria-expanded=\"true\"]select 时出现问题#depart[aria-expanded=\"false\"] 作为不同的元素,但我不知道如何处理它。


问题是:

  1. 如何检查选择/下拉菜单是否使用 selenium/java 展开?
  2. 为什么它没有按预期工作?

编辑 1 2018 年 3 月 9 日

我尝试测试“aria-expanded”值,它给出了相同的结果。 当它应该是 false 时,我在 DOM 中将其视为 false,但在调试中查看它时,selenium 却得到“true”。

编辑 2 2018 年 3 月 9 日

调试我注意到以下内容:如果我在“观察”我的变量之前“检查”我的浏览器,那么我在调试中得到的结果是好的...

调试正在暂停 -> 我在“aria-expanded”上添加一个监视,它给出“true”(而不是预期的“false”) -> 我右键单击我的浏览器/检查页面“aria-expanded”是“假” ->我添加具有相同元素的第二个 watch 或“刷新”第一个 watch ,我在“aria-expanded”(“假”)中获得了正确的值... 增加等待时间没有任何作用...再尝试一些子弹,我会回来提供更多信息

编辑 3 2018 年 3 月 9 日

问题不在于下拉菜单的状态。我和 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 - 如何检查下拉菜单是否用 Selenium 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52118481/

相关文章:

xcode - iphone模拟器可以下载浏览器吗

Python Selenium 数组

javascript - 下拉菜单不能在多个地方使用

java - 在 Java 中覆盖引用

java - 在测试中注入(inject) EntityManager 时,Powermock 和 Spring 导致 ConversionException

java - 搜索栏过滤 ListView 项目

java - Android 搜索界面——显示多个 SearchView

java - 使用 Selenium IDE 进行作业调度

angularjs - 如何制作 Angular Material <md-select> + UI Router View 切换器?

php - 使用从 SQL 中获取的默认值优化下拉列表?