watir - 通过PageFactory传递参数

标签 watir page-object-gem

我正在使用带有 watir 和 RSpec 的页面对象 gem 来测试我的 Web 应用程序。 这是我的页面对象。

require 'page-object'

class UserEditPage
  include PageObject
  page_url "#{$context}/user/edit?id=#{@params[:id]}"

  text_field :user_id, name: 'userName'

  text_field :pw, name: 'password'
  text_field :pw_retype, name: 'password2'

  # snip uninteresting stuff

  button :submit, index: 0
end

我想通过 PageObject::PageFactory 参数化 page_url 中的 :id,如下所示:

visit UserEditPage, using_params: {id: 1000} do |page|
# operation on page
end

This document意味着上述用法是可能的,但我无法理解这是如何实现的。

问题:如何将参数 id 从访问方法传递到 UserEditPage

运行代码结果

       ***/user/edit_page.rb:8:in `<class:UserEditPage>': undefined method `[]' for nil:NilClass (NoMethodError)
        from ***/user/edit_page.rb:5:in `<top (required)>'

可能是因为在评估 page_url 时@params 为零。 将 using_params: {id: 1000} 更改为 id: 1000 但没有成功。

最佳答案

page_url需要是:

page_url "#{$context}/user/edit?id=<%=params[:id]%>"

请注意如何以不同方式包含参数 - 即 <%=params[:id]%>而不是#{params[:id]} .

问题是page_url当评估页面对象类时评估。这意味着当评估该类时,params[:id] 必须已经存在。当您想要动态包含参数时,情况就不是这样了。

页面对象 gem 使用 ERB 来允许您创建模板,该模板允许稍后替换参数 - 即在调用 visit 时.

总之,当创建page_url时:

  1. 如果在评估页面对象类时已知值,则使用字符串插值。
  2. 如果要在访问时动态指定值,请使用 ERB。

工作示例

下面是动态参数的工作示例。

require 'watir-webdriver'
require 'page-object'

$context = 'http://testurl.com'

class UserEditPage
  include PageObject

  page_url "#{$context}/user/edit?id=<%=params[:id]%>"
end

include PageObject::PageFactory   
@browser = Watir::Browser.new

visit UserEditPage, using_params: {id: 1000} do |page|
  p page.current_url
  #=> "http://testurl.com/user/edit?id=1000"
end

关于watir - 通过PageFactory传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19628948/

相关文章:

ruby - 使用 Ruby Watir,如何选择 ID 不断变化的复选框?

firefox - 在 Firefox 中添加安全异常(exception)

selenium - 如何避免页面对象中的复合类名称错误?

ruby - 等待文本出现

internet-explorer - Watir Webdriver 文本在 IE 上输入缓慢

javascript - Watir 不触发 Jquery 事件处理程序

ruby - 在 Chrome 中运行 headless 模式时将文件下载到路径

linux - watir headless 测试在本地 linux 上运行良好,但在 headless linux box 上出错

page-object-gem - 当我对 iframe 中的元素调用 wait_until 时出现 "Element belongs to a different frame than the current one"错误