我已经设置了Appium - Capybara,并且能够在物理设备上运行自动化套件,但面临的问题很少有方法
我能够成功运行像
这样的Capybara方法fill_in field, :with => text
click_button button_text
expect(page).to have_content(text)
但是面对以下方法的问题(它适用于笔记本电脑上的常规镀铬,但不适用于移动设备)
page.first(:link, link_text).click
请您帮助我了解appium capybara是否支持所有的水豚方法或只支持其中的少数方法。
以下是错误消息
undefined method `click' for nil:NilClass (NoMethodError)
答案 0 :(得分:0)
undefined method 'click' for nil:NilClass (NoMethodError)
告诉您#first
没有返回元素(#first
会立即返回匹配元素,如果没有,则返回nil)。你有没有理由使用first
而不是find
?如果页面上只有一个匹配的链接,您应该更喜欢find
而不是first
(在这种情况下为find_link
),或者尝试将范围限定为只会页面的一部分是一个链接,因为它会抛出一个错误,解释为什么它没有找到链接(而不是返回nil)并且还有等待行为的元素显示(first
可以有相同的行为,但它没有默认情况下)
答案 1 :(得分:0)
在上面的代码中,首先在页面上搜索link
和link_text
。如果没有找到链接,则返回nil。
因此,为了使此代码有效,我们需要等待链接文本的链接出现在页面上,然后单击它。
因此,您可以在点击fink之前使用下面提到的任何一个代码
page.should have_content(link_text)
page.find_link(link_text)
如果上述代码不起作用,您还可以尝试增加默认等待时间,如下所示:
Capybara.default_wait_time = 30
page.should have_content(link_text)
page.first(:link, link_text).click
Capybara.default_wait_time = DEFAULT_WAIT_TIME
Capybara测试的DEFAULT_WAIT_TIME在您的环境文件中设置。
希望这会有所帮助:)