SitePrism:有时会找到元素,有时不会,而 Capabara 可以

SitePrism: sometimes find elements, sometimes doesn't while Capabara can


我正在使用 Capybara 和 Selenium 来测试我的网站。我也将 Site Prism 用于页面对象模型。我现在可以让一切正常,但是,我不明白为什么有时使用页面元素的操作不起作用,而使用 "natively" Capybara 工作。
例如,我有一个 Page 对象:

class MyPage < SitePrism::Page
 element :sign_in_link, :css, 'a.signin-link'
 element :join_link, :css, "a.join-link"
end

及其实现:

@mypage = MyPage.new
@mypage.sign_in_link.click
# It works at first, then after some repeated test round, it doesn't work sometimes, with error: NoMethodError <br>

当我使用:

find(:css, 'a.signin-link').click #=> always work, but not Page Object model

那么,为什么会这样?有人遇到过这个问题吗?

默认情况下 site_prism 禁用 Capybaras 在查找元素时的隐式等待行为。这意味着您需要执行与您的水豚示例相同的行为

@mypage = MyPage.new
@mypage.wait_for_sign_in_link
@mypage.sign_in_link.click

您可以在 "Using Capybara Implicit Waits"

下的 site_prism 自述文件中阅读更多相关信息

另一种选择是使用站点棱镜 "Load Validations" 功能来确保页面在开始单击其元素之前已加载