带Ruby的PageObject – 在文本字段中设置文本只能在主文件中使用

我正在自动化一个网站,该网站的页面包含一个单选按钮选择的选项列表。 选择其中一个无线电时,会显示文本字段和选择列表。

我创建了一个文件(test_contracting.rb),它是我执行测试的文件(ruby test_contracting.rb)和其他一些代表我的页面的类。

在我的类ContractPage上,我有以下元素声明:

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”检查了它。 即使我将params更改为像“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中,所有等于方法(以=符号结尾的方法)需要有一个接收器。 让我向您展示一些能够certificate原因的代码。 以下是将局部变量设置为值的代码:

 domain = "blah" 

这是调用domain =方法的代码:

 domain = "blah" 

为了让ruby知道你正在调用方法而不是设置局部变量,你需要添加一个接收器。 只需将上面的方法更改为此方法即可:

 def configure_domain(config={}) check_option_sub_domain self.domain = config[:domain] self.tld = config[:tld] end 

我对Selenium这个世界和页面对象都很陌生,但也许我最近的一个发现可能对你有所帮助。

我发现select_list字段的赋值方法只有在我开始使用“self”时才对我有效。 这是我在页面对象代码中用来访问它的内容。 例如,self.my_select_list =“我的选择列表值”

另一个注意事项 – 你提到的send_keys解决方法很聪明,可能会有很多用途,但在我的情况下,选择列表值是可变的,可能有几个以相同字母开头的选项。

我希望这里的某些内容对你有用。

更新 (1月3日至12日)

在进一步深入到页面对象的实际Ruby代码中时,我发现select_list集也使用了send_keys,所以实际上我仍然有与我直接使用send_keys解决方法所记录的相同的限制。 叹了口气这么多时间学习!