PythonのSelenium非公式ドキュメントの翻訳の継続。
オリジナルは
こちらにあります 。
内容:
1.
インストール2.
最初のステップ3.
ナビゲーション4.
アイテムを検索する5.
期待6.ページオブジェクト
7. WebDriver API
8.付録:よくある質問
6.ページオブジェクト
このセクションは、ページオブジェクトのデザインパターンガイドの概要です。 ページオブジェクトは、テストがやり取りするWebアプリケーションのユーザーインターフェイスの領域です。
ページオブジェクトパターンを使用する長所:
- 多くのテストケースで使用できる再利用可能なコードを作成する
- 重複コードの削減
- ユーザーインターフェイスが変更された場合、必要な変更は1つだけです
6.1テストケース
以下は、python.orgで単語を検索し、何らかの結果が見つかったことを示すテストケースです。
import unittest from selenium import webdriver import page class PythonOrgSearch(unittest.TestCase): """A sample test class to show how page object works""" def setUp(self): self.driver = webdriver.Firefox() self.driver.get("http://www.python.org") def test_search_in_python_org(self): """ Tests python.org search feature. Searches for the word "pycon" then verified that some results show up. Note that it does not look for any particular text in search results page. This test verifies that the results were not empty. """
6.2ページオブジェクトクラス
ページオブジェクトパターンは、各Webページのオブジェクトを作成することを目的としています。 この手法に従って、テストコードと技術的な実装の間に分離レイヤーが作成されます。
page.pyは次のようになります。
from element import BasePageElement from locators import MainPageLocators class SearchTextElement(BasePageElement): """This class gets the search text from the specified locator"""
6.3ページ要素
element.pyは次のようになります。
from selenium.webdriver.support.ui import WebDriverWait class BasePageElement(object): """Base page class that is initialized on every page object class.""" def __set__(self, obj, value): """Sets the text to the value supplied""" driver = obj.driver WebDriverWait(driver, 100).until( lambda driver: driver.find_element_by_name(self.locator)) driver.find_element_by_name(self.locator).send_keys(value) def __get__(self, obj, owner): """Gets the text of the specified object""" driver = obj.driver WebDriverWait(driver, 100).until( lambda driver: driver.find_element_by_name(self.locator)) element = driver.find_element_by_name(self.locator) return element.get_attribute("value")
6.4ロケーター
1つの方法は、ロケーターラインを使用する場所から抽出することです。 この例では、同じページ上のロケーターは同じクラスに属します。
locators.pyは次のようになります。
from selenium.webdriver.common.by import By class MainPageLocators(object): """A class for main page locators. All main page locators should come here""" GO_BUTTON = (By.ID, 'submit') class SearchResultsPageLocators(object): """A class for search results locators. All search results locators should come here""" pass