"page_url" 在 WATIR 中,当它的一部分在 运行 时间发生变化时

"page_url" in WATIR when part of it is changing on run time

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

中制作页面文件

order_page.rb 此页面的 URL 是 https://www.test-xyz.com/order/123123 此页面的最后一位数字始终更改。

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

on(OrderPage).continue_shopping

您不必在使用页面对象 gem 时使用页面 url。仅当您必须直接导航到该页面时才相关。如果您已经在页面上,那么您可以直接执行您的方法。

如果您确实需要导航到该页面,并且直到运行时才知道 url,您可以定义一个方法来获取您不知道的 url 的一部分直到运行时并导航到页面。

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

然后当你想转到页面时调用那个方法就可以了。

仅当使用 PageFactory visit 方法时才需要 page_url 访问器方法。使用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

在我的博客 post 上还有一些 details/tricks 用于指定动态 URL,“Creating page objects with a dynamic page_url”。