私の個人的な経験から、異なるコンテンツの同じURLについて話しているときでも、(概念的に)異なるページに対して異なるページオブジェクトを持つ方がよいと言えるでしょう。
最初のオプションの後に、LoginError
ページオブジェクトを作成することをおすすめします。別のことは、テストとセレンの間の依存関係を直接作成するため、テストとしてではなくページの検証がページオブジェクトで行われることです。
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 テストの観点から、期待される結果を知る必要があります。別のアプローチは、あなたは、単一のそれはのparam
testInvalidCredentials:
login = new LoginPage(..)
login->fillUser('john')
login->fillPassword('aa')
loginError = login->submit('LoginErrorPage')
assertContains('invalid login', loginError->getErrorMessages())
として期待ページオブジェクトを受け入れ提出しかし、100回のテストを書いた後、あなたがこのページに成功提出し、変更後に受信した場合には、あまりにも冗長であることを見つけることができます持っているだろう何度も書き直す必要があります。
あなたは実際にはクリアされていないようです:)あなたは認証ページをテストし、認証方法の成功と失敗の両方をチェックするために単一の方法を使用できるかどうか尋ねますか? – Andersson
簡単に言えば、私の質問は、JUnitテストでは、ドライバの状態(要素のチェック)または新しいクラスのLoginErrorPageのチェック(コンストラクタなど)を使用して、アサーションを置く場所です。あなたが望むなら私の質問を編集できますか? – buzz2buzz
ページ要素を確認する必要はありません。 'driver.getCurrentUrl()'を使って 'submitLoginForm'が' index'ページか 'error'ページを返したかどうかを確認するだけです。 – Andersson