WATIR中的“page_url”,其中一部分在运行时更改

时间:2015-04-06 07:54:08

标签: ruby-on-rails ruby watir watir-webdriver page-object-gem

我正在使用页面对象处理WATIR。在这里,我们需要在.rb示例

中制作页面文件

order_page.rb 此页面的网址为https://www.test-xyz.com/order/123123,此页面的最后数字始终会更改。

现在如何为此页面文件创建一个页面对象,以便我可以使用:

on(OrderPage).continue_shopping

2 个答案:

答案 0 :(得分:2)

仅在使用PageFactory page_url方法时才需要visit访问器方法。使用on方法时不使用它。

鉴于您只想调用on方法,只需从页面对象中删除page_url访问者:

require 'watir-webdriver'
require 'page-object'
include PageObject::PageFactory

class OrderPage
  include PageObject

  link(:continue_shopping, :text => 'Continue Shopping')
end

@browser = Watir::Browser.new :chrome
@browser.goto('path\to\page\test.htm')

on(OrderPage).continue_shopping

如果您确实要指定page_url以便visit,则可以指定由ERB评估的动态URL。例如,您将页面对象定义为:

class OrderPage
  include PageObject
  page_url "https://www.test-xyz.com/order/<%=params[:id]%>"

  link(:continue_shopping, :text => 'Continue Shopping')
end

使用此页面对象,您仍然可以像以前一样调用on方法:

on(OrderPage).continue_shopping

这也使您能够在知道URL的动态部分时直接访问页面:

visit OrderPage, :using_params => {:id => '123123'} do |page|
  page.continue_shopping
end

在我的博客文章“Creating page objects with a dynamic page_url”上指定动态网址时,还有一些细节/技巧。

答案 1 :(得分:0)

使用页面对象gem时,您不必使用页面网址。只有在必须直接导航到该页面时才有意义。如果您已经在页面上,那么您可以执行您的方法。

如果您确实需要导航到该页面,并且在运行时之前不知道该网址,您可以定义一种方法,该方法可以获取您不知道的网址部分直到运行时并导航到页。

def navigate_to_order_page(order_number)
  @browser.goto("https://www.test-xyz.com/order/#{order_number}")
end

然后,当您想要转到该页面时,只需调用该方法。