のではなく、特定のフレームワークに焦点を当て、あなたがテストでページオブジェクトモデルパターンの背後にある理論に関するより多くの情報が必要ように聞こえます。ウェブサイトのための自動化されたUIテストを書くと問題の
Aハイレベルの概要
一つは、UIロジックとテストロジックの間に明確なseparation of concernsがないです。ページオブジェクトモデルパターンは、テストを単なるテストロジック(例えば、アサート、アプリケーションフロー)を含む独自のテストクラスに分割することによって、これを解決することを目的としています。また、ページオブジェクトクラスには、ページとのやりとりが含まれます(たとえば、ボタンをクリックしたり、ページ上のフォームにファイルを提出するなど)。
ページオブジェクト - をより詳細に
これらのクラスは標準的なWebページではなく、ページの一部またはモーダルダイアログボックスを意味するかもしれない「ページ」の表現です。
ページから要素を取得します
は、フォームに入力し
は、典型的には、それらは、ホームページや連絡先を検索する連絡先ディレクトリとアプリを想像してみて
Fluent Interface
として書かれています。これは2ページのオブジェクトになります。ホームページページオブジェクトとContactsDirectoryPageObject。各オブジェクトは、ページを操作してアクションを実行し、データを取得する方法を処理します。テストクラスで使用されるときに、彼らは(puesdocode)のように見えるかもしれませんテスト
にページオブジェクトを使用して
# The Homepage Page Object
class HomepageObject {
ClickContactsDirectoryPageButton()
{
webdriver.click(By.Id("contactsDirectoryButton"));
}
GetContactsDirectoryPageObject()
{
return new ContactsDirectoryPageObject()
}
}
# The Contacts Directory Page Object
class ContactsDirectoryPageObject {
SearchForContact(contactName)
{
webdriver.findElementById("searchBox").Click().SendKeys(contactName)
webdriver.findElementById("search").Click()
}
GetFoundContactInformation()
{
resultElement = webdriver.findElementById("result")
# Some logic to convert element into a model to pass back
result = new ContactResultModel(resultElement);
return result;
}
}
::だから、いくつかのpuesdocodeは、次のようになります
class MyTest {
daveContact = homepage.ClickContactsDirectoryPageButton()
.GetContactsDirectoryPage()
.SearchForContact("Dave")
.GetFoundContactInformation()
Assert.That(daveContact.Name).Equals("Dave")
}
を今すぐテストにのみ行います1つのジョブ - テスト中のフィーチャが機能することを主張します。アプリケーションを操作し、アプリケーションからのデータをアサートします。このテストでは、ページがどのように構築されているかは分かりません。
なぜ迷惑なの?
- テストにテストロジックとページオブジェクトモデルロジックの両方が含まれている場合は、ボタンまたはテキストボックスのIDが変更されるたびにすべてのテストを更新する必要があります。
- テストは、アプリのフローをマッピングして正しいと主張するので、読みやすくなります。
- アプリケーションの変更時にテストを更新するのは、ページオブジェクトを更新する場所が1つしかないためです。
出典
2016-03-23 12:41:35
Tom
あなたは本当にそれを考えすぎています。 Rubyでは、受け入れテストツールとしてSeleniumを使用します.Seleniumは、(ローカル)Webサーバーが提供する実際のページをクロールするブラウザを自動化するツールです。 RSpecとCapybaraまたはMiniTest/TestUnitとCapybaraを使っていくつかの基本的な例を見てください。推薦はstackoverflowの話題にはありませんので、私は言及しません。 – max
ありがとう、私はそれらのフレームワークをチェックアウトします。 – Speedychuck