尝试学习将PageObjects与Ruby结合使用-出现错误“未初始化的常量站点(NameError)”

时间:2018-11-12 15:31:02

标签: ruby watir pageobjects

我在Python中具有Selenium的经验,在Ruby中具有Cucumber / Watir / RSpec的经验,可以编写成功执行的脚本,但是它们没有使用类,因此我试图学习有关类的更多信息并分解这些脚本进入pageobejcts。

我发现此示例可供您学习:http://watir.com/guides/page-objects/,因此复制了脚本并进行了一些较小的编辑,如下所示。

我在Win10上将SublimeText 3.x与Ruby 2.4.x一起使用,因此您知道我正在使用哪些工具。

我将整个脚本放入一个.rb文件中(唯一的区别是我替换了URL和用于输入用户名和密码的元素)并尝试执行该脚本并得到以下错误:

C:/selenium/ruby/lotw/lotwlogin.rb:3:in `<main>': uninitialized constant Site (NameError).

我添加了第一行(required 'watir'),这与遇到的错误没有什么区别。

因此,在lotwlogin.rb中,我基本了解了带有自定义元素的原始脚本的结构和语法。但是,核心结构正在报告错误,我不知道该怎么办。

这是我的剧本:

require 'watir'

site = Site.new(Watir::Browser.new :chrome) # was :firefox but that no longer works since FF63

login_page = site.login_page.open 
user_page = login_page.login_as "testuser", "testpassword" # dummy user and password for now

user_page.should be_logged_in

class BrowserContainer   
  def initialize(browser)
    @browser = browser   
  end 
end

class Site < BrowserContainer   
  def login_page
    @login_page = LoginPage.new(@browser)
  end

  def user_page
    @user_page = UserPage.new(@browser)
  end

  def close
    @browser.close
  end
end


class LoginPage < BrowserContainer
  URL = "https://lotw.arrl.org/lotw/login"

  def open
    @browser.goto URL
    #@browser.window.maximize
    self   # no idea what this is for
  end

  def login_as(user, pass)
    user_field.set user
    password_field.set pass

    login_button.click

    next_page = UserPage.new(@browser)
    Watir::Wait.until { next_page.loaded? }

    next_page
  end

  private

  def user_field
    @browser.text_field(:name => "login")
  end

  def password_field
    @browser.text_field(:name => "password")
  end

  def login_button
    @browser.button(:value => "Log On")   
  end
end # LoginPage

class UserPage < BrowserContainer   
  def logged_in?
    logged_in_element.exists?   
  end

  def loaded?
    @browser.h3 == "Welcome to Your Logbook of the World User Account Home Page"   
  end

  private

  def logged_in_element
    @browser.div(:text => "Log off")   
  end 
end # UserPage

我们将不遗余力地为您提供有关如何避免出现网站错误的帮助。

谢谢

迈克

1 个答案:

答案 0 :(得分:1)

仅在下面几行定义类Site。但是到那时,还不知道。

将此逻辑移至所有类定义之后:

site = Site.new(Watir::Browser.new :chrome) # was :firefox but that no longer works since FF63

login_page = site.login_page.open 
user_page = login_page.login_as "testuser", "testpassword" # dummy user and password for now

user_page.should be_logged_in