Из моего личного опыта я могу сказать, что лучше иметь разные объекты страницы для (концептуально) разных страниц, даже если мы говорим о том же URL-адресе с другим контентом.
Поэтому я предлагаю вам следовать вашему первому варианту, создав объект страницы LoginError
. Другое дело, что проверка страницы должна выполняться в вашем объекте страницы, а не как тест, потому что вы напрямую создаете зависимость между тестом и Selenium.
IE (в очень pseudocodish способом)
class BasePage {
constructor (driver, context, isLoaded = false) {
this->webDriver = driver
//clicking links or submitting forms from other page objects
//will trigger the page load at driver level so we don't want to trigger a page reload
if (isLoaded) {
this->loadPage()
}
this->validatePage()
}
loadPage() {
this->webDriver->get(this->getPageUrl)
}
abstract validatePage()
abstract getPageUrl()
}
class LoginPage extends BasePage{
validatePage() {
this->elementUsername = this->webDriver->findElement(WebDriverBy::id('username'))
this->elementPassword = this->webDriver->findElement(WebDriverBy::id('password'))
this->elementSubmit = this->webDriver->findElement(WebDriverBy::id('submit'))
}
getPageUrl() {
return '/login/'
}
fillUser(value) {
this->elementUsername->sendKeys(value)
}
fillPassword(value) {
this->elementPassword->sendKeys(value)
}
submitValid() {
this->elementSubmit->submit()
return new DashboardPage(this->webDriver, this->context, true)
}
submitInvalid() {
this->elementSubmit->submit()
return new LoginErrorPage(this->webDriver, this->context, true)
}
}
class DashboardPage extends BasePage {
validatePage() {
this->webDriver->findElement(WebDriverBy::id('welcomeMessage'))
}
getPageUrl() {
return '/dashboard/'
}
}
На данный момент тесты будут только разобраться в WebDriver арматуре, но не должны ничего знать о ваших страницах
testValidCredentials:
login = new LoginPage(..)
login->fillUser('john')
login->fillPassword('aa')
dashboard = login->submitValid()
testInvalidCredentials:
login = new LoginPage(..)
login->fillUser('john')
login->fillPassword('aa')
loginError = login->submitInvalid()
testWelcomeMessage:
dashboard = new DashboardPage(..)
// a bad (but short enough) example, don't actually do this
assert(true, regexp('welcome', dashboard->getSource))
LE С точки зрения тестирования вы должны знать свой ожидаемый результат. Другой подход должен были бы иметь один представить, что принимает ожидаемый объект страницы, как пары
testInvalidCredentials:
login = new LoginPage(..)
login->fillUser('john')
login->fillPassword('aa')
loginError = login->submit('LoginErrorPage')
assertContains('invalid login', loginError->getErrorMessages())
Но после написания 100 тестов вы найдете это будет слишком многословным и, если страница, полученная после успешной представить изменения, у меня будет много переписывания.
Кажется, что вы на самом деле не поняли :). Вы хотите протестировать свою страницу авторизации и спросить, можно ли использовать один метод для проверки как успешных, так и недействительных случаев авторизации? – Andersson
Вкратце, мой вопрос заключается в том, где поставить утверждение: непосредственно в JUnit test, в состоянии драйвера (check element) ИЛИ используя проверку (например, в конструкторе) нового класса 'LoginErrorPage'. Я могу изменить свой вопрос, если вы хотите? – buzz2buzz
Вам не нужно проверять элементы страницы. Просто используйте 'driver.getCurrentUrl()', чтобы проверить, возвращает ли 'submitLoginForm' страницу' index' или 'error'. – Andersson