如何使用 Ruby 中的 'page-object' gem 来测试 page_url 是否正确

How to test if page_url is correct using the 'page-object' gem in Ruby

这是我的小黄瓜的例子:

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

include PageObject::PageFactory

Given(/^user is on google home page$/) do
  visit_page GoogleHome
end

When(/^user enters search criteria in google search bar$/) do
  @browser.text_field(:name, "q").set "latest news"
end

Then(/^user is redirected to results page$/) do
  on_page ResultPage do |page|
    page.text.include? page.WEB_STRING
  end
end

Given(/^user is on result page$/) do
  visit_page ResultPage
end

When(/^user clicks on website link$/) do
  on_page ResultPage do |page|
    page.news_link
  end
end

Then(/^user is redirected to website$/) do
  on_page FoxNews do |page|
    page_url.value?("http://www.foxnews.com/")
  end
end

这是我的页面定义示例:

require 'page-object'

class FoxNews
  include PageObject
  page_url "http://www.foxnews.com/"
end

基本上,我想测试用户是否真的被重定向到示例新闻站点。代码运行顺利,但我的测试用例有问题。我试过 page_url.inlcude?page_url.value?.

一个页面对象有两个与获取相关的方法 URL:

  1. page_url_value - 这是 page_url 访问器中指定的 URL(即预期的 URL)。
  2. current_url - 这是浏览器当前的 URL.

要检查是否显示了正确的页面,那么您要检查current_url。步骤为:

Then(/^user is redirected to website$/) do
  on_page FoxNews do |page|
    page.current_url == 'http://www.foxnews.com/'
  end
end

不过,这一步总会过去的。我假设你真的想做一个断言:

Then(/^user is redirected to website$/) do
  on_page FoxNews do |page|
    expect(page.current_url).to eq('http://www.foxnews.com/')
  end
end

除了在页面对象和测试中复制预期的 URL,您还可以使用 page_url_value:

Then(/^user is redirected to website$/) do
  on_page FoxNews do |page|
    expect(page.current_url).to eq(page.page_url_value)
  end
end