Ruby 陈旧元素引用:元素未附加到DOM-需要等待元素/元素可见/使用SitePrism启用

Ruby 陈旧元素引用:元素未附加到DOM-需要等待元素/元素可见/使用SitePrism启用,ruby,selenium,phantomjs,capybara,site-prism,Ruby,Selenium,Phantomjs,Capybara,Site Prism,我想使用wait_until方法,直到我的元素可见为止。目前我正在使用Siteprism方法,如下所示。这是一个内置的Siteprism方法,但看起来它的性能不好,并且间歇性地抛出错误(DOM中不存在对象) 所以我想用水豚的find方法。这是一个更好的最简单的解决方案。但是我在定义css时遇到了麻烦。当我在ruby类中定义css时。我想在下面的代码中使用该变量。我该怎么做 page.find('#blah').visible?.should be_true 我想要这样的东西: page.fin

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

所以我想用水豚的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
需要帮助。。。。。或者任何其他解决方案都将受到欢迎。

#find
采用选择器类型和某些类型的参数,而不采用页面中的元素。由于(快速查看源代码后)似乎无论如何都无法从site_prism访问
元素:btn_元素,
声明中指定的参数,因此您无法调用
\find
,而无需重新键入选择器。也就是说,
@home.wait_-btn_-element_-visible
和您声明要执行的操作之间应该没有区别,因为site_-prism最终调用了指定了
visible:true
的Capybaras-find。唯一的区别是site_prism使用自己的等待超时,因此您可能希望尝试增加SitePrism::water.default_wait_时间,或者在wait_until_xxx调用中指定更长的等待超时时间

@home.wait_until_btn_element_visible(10)

正如我所说,它间歇性地抛出这个错误:stale element reference:element未连接到DOMI,可以通过拯救它并重试来解决它。但是我不喜欢它。需要其他好的解决方案吗/method@ASM是--但只有在超时发生后(尝试增加超时时间),或者如果使用
#all
#first
找到@home元素时,该错误才会出现。在这种情况下,它无法自动重新加载自身,您应该更改它的位置。我的元素(btn#U元素)实际上是元素,我也试着等了60秒。它仍然会在60秒后抛出错误。但我可以在UI中看到该元素,页面已经加载了该元素。@ASM什么是
@home
-是来自元素或元素定义,还是SitePrism::page对象?
@home.wait_until_btn_element_visible(10)