【问题标题】:stale element reference: element is not attached to the DOM - Need to wait until element/ elements visible/enabled using SitePrism过时的元素引用:元素未附加到 DOM - 需要等到元素/元素可见/使用 SitePrism 启用
【发布时间】:2016-09-21 22:34:29
【问题描述】:

我想使用 wait_until 方法直到我的元素可见。目前我正在使用 Siteprism 方法,如下所示。这是一种内置的 Siteprism 方法,但看起来它的性能不佳,因为它间歇性地抛出错误(DOM 中不存在对象)。

@home.wait_until_btn_element_visible

所以我想使用 capybara 的 find 方法。可证明这是一个更好的最简单的解决方案。但是我在定义 CSS 时遇到了麻烦。正如我在 ruby​​ 类中定义 css 一样。我想在下面的代码中使用该变量。我该怎么做?

page.find('#blah').visible?.should be_true

我想要这样的东西:

page.find(@home.btn_element).visible?.should be_true

看起来它不起作用,而是在下面抛出这个错误:

invalid selector: An invalid or illegal selector was specified

需要帮助.....或任何其他解决方案将不胜感激..

【问题讨论】:

    标签: ruby selenium phantomjs capybara site-prism


    【解决方案1】:

    #find 采用选择器类型和某种类型的参数,它不采用页面中的元素。由于(在快速查看源代码之后)它似乎没有访问来自 site_prism 的 element :btn_element, ... 声明中指定的参数,因此您无法在不重新输入选择器的情况下调用 #find。话虽这么说,@home.wait_until_btn_element_visible 和您声明的内容之间确实应该没有区别,因为 site_prism 最终调用 Capybaras find 并指定了visible: true。唯一的区别是 site_prism 使用自己的等待超时,因此您可能想尝试增加 SitePrism::Waiter.default_wait_time 或在 wait_until_xxx 调用中指定更长的等待超时

    @home.wait_until_btn_element_visible(10)
    

    【讨论】:

    • 正如我所说,它间歇性地抛出这个错误:stale element reference: element is not attach to the DOM
    • 我可以通过救援解决它,然后重试。但我不喜欢它。需要其他一些好的解决方案/方法
    • @ASM 是的——但该错误应该只在超时发生后引发(尝试增加超时)或者可能在使用#all#first 找到您的@home 元素时出现,在这种情况下它无法自动重新加载,您应该更改它的位置。
    • 我的元素(btn_element)实际上是元素,我也尝试等待 60 秒。 60 秒后它仍然会抛出错误。但我可以在 UI 中看到该元素,页面已经加载了该元素。
    • @ASM @home 是什么 - 是来自一个或多个元素定义,还是 SitePrism::Page 对象?
    猜你喜欢
    • 2021-12-15
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多