首页 > 解决方案 > 如何收听 Selenium 中的 CSS 变化?

问题描述

我有一个 div,它是一个保存按钮,有一个很棒的字体符号。单击 div 后,将添加一个新的 CSS 类disabled,其中不透明度降低,以直观地表示单击按钮。在保存事件之后,disabledCSS 类再次被删除,按钮再次完全可见。如果我尝试通过 Selenium 天真地验证这一点,则添加 CSS 类和删除对于 Selenium 来说太快了,即

driver.findElement(By.cssSelector(".save-button")).click();

正在工作并找到按钮并单击它,但下一个 find 会抛出NoSuchElementException

driver.findElement(By.cssSelector(".save-button .disabled"));

它也不适用于显式等待(为了简化,我没有提到)。Selenium 太慢而无法识别更改,即在第二次查找开始之前删除了 CSS 类。我是否需要在点击事件之前启动监听器之类的东西,也许是通过 Selenium 的 JavaScript 解决方案?还有其他方法吗?看起来在 Selenium 中不可能进行线程等待。

标签: javahtmlcssselenium

解决方案


Selenium 并不太慢(至少在这种情况下),但 CSS 参数是错误的:

".save-button .disabled"一个空格意味着层次结构中的两个元素(<div class="save-button"><div class="disabled"/></div>".save-button.disabled"本来是正确的并且确实有效。

我一开始没有注意到,因为 Chrome 检查器不是那么严格,并且发现 div 具有这个理论上错误的参数。

编辑:正如 JeffC 的评论中提到的那样,检查员将元素与错误参数匹配的细节不可能是真的。我用这个页面的评论 div 验证了它,检查器在这里不匹配。请参阅下面的屏幕截图。由于我的 Selenium 测试正在运行,因此我不会对此进行进一步分析。

此页面的检查员屏幕截图


推荐阅读