【发布时间】:2018-11-28 09:10:39
【问题描述】:
据我所知,通过搜索似乎没有任何简单的答案。
场景
一个 JSF 页面包含一个表单。有一个下拉元素,在更改时会发送一个 XHR(而不是 jQuery)Ajax 调用来更新 DOM。对于所有意图,更新是难以辨认的 - 它仍然具有相同的字段,但会重新加载它们。由于所有这些都是使用 JSF 完成的,因此最好假设我无法修改/修改页面的 JS 或功能。
使用 Selenium/Cucumber,我需要应用一个“等待”直到 XHR 完成的步骤。这不使用jQuery,所以jQuery.active 在整个请求中返回0。
我也不能对任何 DOM 元素使用任何“等待”方法,因为它们不会改变 - 只需在 XHR 完成后“重新构造”。也没有其他加载“提示”,例如 Spinner。
Chrome 中的开发者工具似乎能够在“网络”中为 XHR 的启动和完成计时,但我不知道这是否是通过另一层完成的——而不是我可以通过控制台返回的任何值。
到目前为止我发现的任何方法似乎都依赖于 JS 注入——这不可能吗?
【问题讨论】:
-
如果 DOM 被重新加载,一个元素会变得“陈旧”,您应该能够在 Ajax 开始之前抓取页面上的一个元素并检查它直到它“陈旧”并且然后再次抓取该元素,当它不是“陈旧”时,可能将其用作 DOM 已重新加载的指示。
-
“js 注入”是什么意思? stackoverflow.com/questions/7880843/… 有帮助吗?它谈到了添加“全局”ajax 事件,就像你对 jquery 所做的那样。
-
@RyanWilson - 现在你提到它很明显!谢谢!通过使用等待
ExpectedConditions.stalenessOf( getWebDriver().findElement( By.id( webElement ) ) )解决,然后等待ExpectedConditions.visibilityOfElementLocated( By.id( webElement ) )
标签: selenium-webdriver xmlhttprequest cucumber-java