У меня есть некоторый опыт работы с 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