【问题标题】:Selenium fails to find component after dom update (reRender)Selenium 在 dom 更新后找不到组件(重新渲染)
【发布时间】:2010-12-28 19:32:48
【问题描述】:

我正在使用 selenium 测试 Richfaces 应用程序。它工作正常,除非我使用reRender。 (对于那些不熟悉 Richfaces 的人 - 每当 ajax 请求完成时,DOM 的一部分就会更新/更改/删除)。

因此,在reRender selenium(至少是 IDE)无法找到重新渲染区域内的元素之后。 FireBug 和 WebDeveloper 都定位元素,并在“查看源代码”上找到元素。

那么,有没有办法告诉 selenium 用最新的变化来更新它的 DOM “知识”?

Firefox 3.5.6,最新版本的 Selenium IDE。

【问题讨论】:

    标签: selenium richfaces


    【解决方案1】:

    我正在使用在 Ubuntu Linux 上运行的 Fifefox 3.6.8、Selenium IDE 1.0.7 和 RichFaces 3.3.1。我没有这个问题。

    我有一个简单的表单,其中单选按钮的选择会触发 a:outputPanel 的重新渲染。最初,面板是空的。如果选择了右单选按钮,则满足渲染条件,并且面板将与其子组件一起重新渲染。我可以设置一个 waitForCondition 来查找将作为面板子元素出现的元素 id,并且我可以在子元素出现后对其进行验证。当我在 Firefox 中单击鼠标右键时,Selenium IDE 可以正确识别这些子元素。

    【讨论】:

    • 所以也许他们在 1.0.7 中修复了它。
    【解决方案2】:

    Selenium 不保留 DOM 的缓存版本。不能,因为它使用的是 JavaScript,并且所有 javascript DOM 查询总是live

    您使用什么来查找元素?如果您使用的是 Xpath/CSS 选择器,那么 XPath 可能不再有效,或者 CSS 选择器可能不正确。

    【讨论】:

    • 我正在使用 XPath。 XPath 对 reRender 之前的 item 有效,对于 reRender 之后的同一 item 无效。使用 WebDeveloper 我跟踪对象的实际路径,而 selenium IDE 中的 XPath 似乎没有找到那里肯定存在的元素。
    • 你可以在你想要的项目的重新渲染之前和之后放置一个标记的代码sn-p吗?如果你正在向下移动一棵树,那么也添加它。它将帮助我为您提供更强大的选择器
    • 我明天就可以了。我尝试了最具体的选择器 - 从身体跟随孩子,每次下降一级,点击“查找”。在我到达重新渲染区域时,无法使用 Selenium IDE 中的 XPath 定位 WebDeveloper 显示的项目。此外 - 当我在“记录”模式下单击该位置并重新渲染该区域时,IDE 会放置“INVALID_LOCATOR_..”(或类似的东西),而如果我在重新渲染之前这样做,它会放置一个正确的定位器。所以我很确定这要么是一个错误,要么我应该以某种方式告诉它刷新它的缓存。但我不知道怎么做。
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2021-05-19
    • 2019-10-11
    • 2022-01-26
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多