Appium-Capybara-ruby在物理设备上运行自动化,一些水豚功能不起作用

时间:2016-02-10 14:25:52

标签: ruby capybara appium

我已经设置了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)

2 个答案:

答案 0 :(得分:0)

undefined method 'click' for nil:NilClass (NoMethodError)告诉您#first没有返回元素(#first会立即返回匹配元素,如果没有,则返回nil)。你有没有理由使用first而不是find?如果页面上只有一个匹配的链接,您应该更喜欢find而不是first(在这种情况下为find_link),或者尝试将范围限定为只会页面的一部分是一个链接,因为它会抛出一个错误,解释为什么它没有找到链接(而不是返回nil)并且还有等待行为的元素显示(first可以有相同的行为,但它没有默认情况下)

答案 1 :(得分:0)

在上面的代码中,首先在页面上搜索linklink_text。如果没有找到链接,则返回nil。 因此,为了使此代码有效,我们需要等待链接文本的链接出现在页面上,然后单击它。 因此,您可以在点击fink之前使用下面提到的任何一个代码

  1. page.should have_content(link_text)

  2. page.find_link(link_text)

  3. 如果上述代码不起作用,您还可以尝试增加默认等待时间,如下所示:

    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在您的环境文件中设置。

    希望这会有所帮助:)