Попытка научиться использовать PageObjects с Ruby - получение ошибки «Неинициализированная константа Site (NameError)» - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть некоторый опыт работы с Selenium в Python и Cucumber / Watir / RSpec в Ruby, и я могу писать сценарии, которые выполняются успешно, но они не используют классы, поэтому я пытаюсь узнать больше о классах и разбить их на части в pageobejcts.

Я нашел этот пример для изучения: http://watir.com/guides/page-objects/, поэтому скопировал скрипт и сделал несколько незначительных правок, как вы увидите ниже.

Я использую SublimeText 3.x с Ruby 2.4.x на Win10, чтобы вы знали, какие инструменты я использую.

Я поместил весь сценарий в один файл .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

Любая помощь, как не получить ошибку сайта будет принята.

Спасибо

Mike

1 Ответ

0 голосов
/ 12 ноября 2018

Вы определяете класс 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
...