Ниже приведены несколько подходов, которые я пробовал. Я не использовал инфраструктуру WatirSplash, но применялись те же концепции (хотя код примера попытки WatirSplash может быть не точен на 100%).
Решение 1. Верните объекты страницы
Лично я предпочитаю, чтобы объекты страницы не возвращали объекты страницы. Вместо этого мне легче читать/работать с явной инициализацией каждого объекта страницы в тесте. Алистер Скотт рассказал об этом в своем блоге.
Тогда ваши тесты будут выглядеть так:
#For login successful tests
page = App::Page::Login.new
page.login_btn.click
page = App::Page::VehicleSelection.new #The VehicleSelection page is explicitly initialized
page.validate_page #or whatever you want to do with the page
#For login failed tests
page = App::Page::Login.new
page.login_btn.click
page.validate_page #or whatever you want to do with the page
Решение 2. Создайте несколько методов входа
Другим решением было бы создать два метода входа в систему — один для успешного входа и один для неудачного входа.
Объект страницы может быть:
module App
module Page
class Login < WatirSplash::Page::Base
url "http://[removed].com"
def login(user, password)
#Do whatever code to input name and password and then click the button
#Then redirect to the VehicleSelection page since that is where you will want to go most often
redirect_to VehicleSelection
end
def login_failed(user, password)
login(user, password)
#Return the Login page (instead of the VehicleSelection page).
redirect_to Login
end
end
end
end
С тестами:
#For login successful tests
login_page = App::Page::Login.new
vehicle_page = login_page.login(user, password)
vehicle_page.validate_page #or whatever you want to do with the Vehicle Selection page
#For login failed tests
login_page = App::Page::Login.new
login_page.login_failed(user, password)
login_page.validate_page #or whatever you want to do with the Login page
Решение 3. Сообщите кнопке, куда она направляется
Другим решением было бы, чтобы кнопка входа знала, на какую страницу перенаправлять.
Объект страницы может быть:
module App
module Page
class Login < WatirSplash::Page::Base
url "http://[removed].com"
def login_btn(login_successful=true)
if login_successful
modify button(:id => 'btnLogin'), :click => lambda {redirect_to VehicleSelection}
else
modify button(:id => 'btnLogin'), :click => lambda {redirect_to Login}
end
end
end
end
end
С тестами:
#For login successful tests
login_page= App::Page::Login.new
vehicle_page = login_page.login_btn.click
vehicle_page.validate_page #or whatever you want to do with the Vehicle Selection page
#For login failed tests
login_page= App::Page::Login.new
login_page.login_btn(false).click
login_page.validate_page #or whatever you want to do with the Login page
person
Justin Ko
schedule
29.11.2012