如何检查下拉菜单是否用硒展开

时间:2018-08-31 15:19:20

标签: 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

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

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

我的第一个猜测是,这与我们之前选择的东西有关,但是事实证明,不,即使检查是我在页面上所做的第一件事,它仍会失败。

第二个猜测是选择元素是特定的,和/或试图将select#depart[aria-expanded=\"true\"]select#depart[aria-expanded=\"false\"]用作不同元素的问题,但是我不知道如何处理


问题是:

  1. 如何检查selenium / java是否扩展了选择/下拉菜单?
  2. 为什么它不能按预期工作?

编辑1 18/3/09

我试图测试“ aria-expanded”值,它给出相同的结果。 在DOM中应该是假的时候,我会认为它是假的,但是在调试时,硒会变成“ true”。

编辑2 18/3/09

调试中,我注意到以下几点:如果在“观察”变量之前“检查”我的浏览器,则调试中得到的结果就可以了...

调试暂停->我在“ aria-expanded”上添加了一个手表,它给出了“ true”(而不是预期的“ false”)->我右键单击浏览器/检查“ aria-expanded”页面是否“ false”->我添加第二个具有相同元素的手表,或者“刷新”第一个手表,我在“ aria-expanded”(“ false”)中得到了正确的值... 等待时间的增加无济于事...尝试更多的项目符号,我会返回更多信息

修改3 18/3/18

问题不在于下拉菜单的状态。我和theGuy都完成了“检查下拉菜单是否已展开”工作(问题1)

由于这是我接受盖伊回答的主要问题。

关于问题2:这可能是一个特定的问题,值得提出自己的问题,我设法通过在选择中发送“制表键”来暂时解决该问题。这是一个“紧急情况下”的修复程序,但是我不想让整个问题都待解决,也不想让人们至少没有领先优势。

1 个答案:

答案 0 :(得分:1)

尝试:

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");