ruby - 使用 Ruby 的 PageObject - 在文本字段中设置文本仅适用于主文件

标签 ruby selenium webdriver pageobjects page-object-gem

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

我创建了一个文件 (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”检查过它。即使我将参数更改为像“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

你们有没有解释为什么页面对象自动生成的设置对象值的方法在这个范围/上下文中不起作用?

顺便说一句,一位 friend 用 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

关于ruby - 使用 Ruby 的 PageObject - 在文本字段中设置文本仅适用于主文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8679326/

相关文章:

java - 如何使用 Maven 在 Firefox 中运行 Selenium WebDriver 测试用例?

java - 如何在 JSF 页面中找到与带有 Selenium 的 AJAX 推送服务器连接的字段?

c# - 找不到默认的 Chrome 二进制文件

java - 如何使用 FirefoxProfile 在 FireFox Selenium webdriver 中启用 Adob​​e Flash

ruby - 如何通过 ruby​​ UDPSocket 类发送原始十六进制数据?

ruby-on-rails - 如何在 Rails 中使用 JSON 填充我的数据库?

arrays - 检查数组中的所有元素是否为零的方法是什么?

spring - Selenium:如何在下拉框上设置测试?

javascript - 如何在 Angularjs Protractor 中使用命令行参数?

ruby - 翻转 ruby​​ 哈希关联的内置方法