我正在使用Capybara和Selenium来测试我的网站。我还使用Site Prism作为Page Object模型。我现在可以让每件事情都有效,但是,我不明白为什么有时使用页面元素的动作不会起作用,而使用“原生”的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
那么,为什么会这样呢?有没有人遇到过这个问题?
答案 0 :(得分:1)
默认情况下,site_prism会在查找元素时禁用Capybaras隐式等待行为。这意味着与您需要做的水豚示例具有相同的行为
@mypage = MyPage.new
@mypage.wait_for_sign_in_link
@mypage.sign_in_link.click
您可以在&#34;使用Capybara Implicit Waits&#34;
下的site_prism自述文件中阅读更多相关信息。另一个选择是使用网站棱镜&#34;加载验证&#34;功能,以确保在开始点击其元素之前加载页面