我正在自动创建一个网站,该网站有一个页面,其中包含通过单选按钮选择的选项列表。选择其中一个收音机时,将显示一个文本字段和一个选择列表。
我创建了一个文件(test_contracting.rb)来执行测试(ruby test_contracting.rb)和其他一些类来表示我的页面。
在类契约页上,我有以下元素声明:

  checkbox(:option_sub_domain, :id => "option_sub_domain")
  text_field(:domain, :id => "domain_text")
  select_list(:tld, :id => "domain_tld")

我在ContractPage中创建了一个方法,用于设置域的配置,如下所示:
  def configure_domain(config={})
        check_option_sub_domain
        domain = config[:domain]
        tld = config[:tld]
   end

当我从test_contracting.rb调用configure_domain方法时,它会选择单选按钮,但不会用值填充字段参数正确地进入了方法。我已经用“puts”检查过了即使我把参数改成像“bla”这样的一般字符串,也不起作用。烦人的一点是,如果在test_contracting.rb上我调用完全相同的组件,它就会工作。
my_page_instance = ContractPage.new(browser)
my_page_instance.domain = "bla"
my_page_instance.tld = ".com"

我发现的工作是在configure_domain方法中实现以下内容:
domain_element.value = config[:domain]
tld_element.send_keys config[:locaweb_domain]

然后成功了。
我正在使用的PageObjects模块的文档可以在这里找到:http://rubydoc.info/github/cheezy/page-object/master/PageObject/Accessors#select_list-instance_method
你们有没有解释过为什么pageobject自动生成的设置对象值的方法在这个作用域/上下文中不起作用?
顺便说一句,一个朋友用Java做了同样的尝试,但也失败了。

最佳答案

在ruby中,所有equals方法(以=符号结尾的方法)都需要有一个接收器让我给你展示一些代码来说明原因下面是将局部变量设置为值的代码:

domain = "blah"

下面是调用domain=方法的代码:
domain = "blah"

为了让ruby知道您正在调用一个方法而不是设置一个局部变量,您需要添加一个接收器只需将上面的方法更改为此方法,它就可以工作:
def configure_domain(config={})
    check_option_sub_domain
    self.domain = config[:domain]
    self.tld = config[:tld]
end

10-02 08:13
查看更多