Python用のセレン。 第2章最初のステップ

PythonのSelenium非公式ドキュメントの翻訳の継続。
バイジュムツカダンの許可を得て翻訳。
オリジナルはこちらにあります

内容:


1. インストール
2.最初のステップ
3. ナビゲーション
4. 検索要素
5. 期待
6.ページオブジェクト
7. WebDriver API
8.付録:よくある質問

2.最初のステップ


2.1。 簡単な使用


PythonへのSeleniumバインディングを確立している場合は、Pythonインタープリターで使用を開始できます。

from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get("http://www.python.org") assert "Python" in driver.title elem = driver.find_element_by_name("q") elem.send_keys("pycon") elem.send_keys(Keys.RETURN) assert "No results found." not in driver.page_source driver.close() 

上記のコードをファイル(たとえば、python_org_search.py​​)に保存して、実行できます:
  python python_org_search.py 
実行するPythonには、インストールされたSeleniumモジュールが含まれている必要があります。

2.2。 段階的な分析例


selenium.webdriverモジュールは、WebDriverのすべての機能を提供します。 WebDriverは現在、Firefox、Chrome、Ie、およびRemoteの実装をサポートしています。 Keysクラスは、RETURN、F1、ALTなどのキーボードコマンドとの対話を提供します...

 from selenium import webdriver from selenium.webdriver.common.keys import Keys 

次に、Firefox WebDriverクラスの要素が作成されます。

 driver = webdriver.Firefox() 

driver.getメソッドは、パラメーター内のURLをページにリダイレクトします。 WebDriverは、テストまたはスクリプトに制御を渡す前に、ページが完全にロードされるまで待機します(つまり、onloadイベントは無視されます)。 ロード時にページが大量のAJAXコードを使用する場合、WebDriverは完全にロードされたかどうかを認識しない可能性があることに注意してください。

 driver.get("http://www.python.org") 

次の行は、見出しに「Python」という単語が含まれているというアサーションです[assertを使用すると、プログラム内の任意の場所で任意のデータの値に関する仮定を確認できます。 本質的に、assertはプログラムコードの途中にある事実の声明に似ています。 口述文が正しくない場合、assertは例外をスローします。 この動作により、厳密に定義された方向でプログラムの実行を制御できます。 アサートと条件の違いは、アサートを持つプログラムはイベントの異なるコースを受け入れないことです。プログラムまたは関数のさらなる実行は無意味であることを考慮してください-注。 trans。]:

 assert "Python" in driver.title 

WebDriverは、find_element_by_ *メソッドを使用して要素を取得するいくつかの方法を提供します。 たとえば、テキスト入力要素の入力は、find_element_by_nameメソッドによる名前属性によって見つけることができます。 要素検索方法の詳細な説明は、要素検索の章にあります。

 elem = driver.find_element_by_name("q") 

その後、キーストロークを送信します(キーボードからキーを入力するのに似ています)。 selenium.webdriver.common.keysからインポートされたKeysクラスを使用して、特別なコマンドを渡すことができます。

 elem.send_keys("pycon") elem.send_keys(Keys.RETURN) 

ページの応答後、結果があれば取​​得します。 結果を確実に取得するために、次のステートメントを追加します。

 assert "No results found." not in driver.page_source 

最後に、ブラウザウィンドウが閉じます。 closeの代わりにquitメソッドを呼び出すこともできます。 quitメソッドはブラウザーを完全に閉じ、closeは1つのタブを閉じます。 ただし、開いているタブが1つだけの場合、デフォルトではほとんどのブラウザーは完全に閉じます。

 driver.close() 

2.3。 Seleniumを使用してテストを作成する


Seleniumは、テストケースの記述に最もよく使用されます。 セレンパッケージ自体は、テストユーティリティや開発ツールを提供しません。 Python unittestモジュールを使用してテストを作成できます。 テストユーティリティ/開発ツールとしての他の選択肢は、py.testとnoseです。
この章では、選択したユーティリティとしてunittestを使用します。 以下は、このモジュールを使用した変更例です。 このスクリプトは、python.orgの検索機能をテストします。

 import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys class PythonOrgSearch(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() def test_search_in_python_org(self): driver = self.driver driver.get("http://www.python.org") self.assertIn("Python", driver.title) elem = driver.find_element_by_name("q") elem.send_keys("pycon") assert "No results found." not in driver.page_source elem.send_keys(Keys.RETURN) def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main() 

次のコマンドを使用して、コマンドラインから上記のテストを実行できます。
  python test_python_org_search.py
 。
 -------------------------------------------------- --------------------
 15.566sで1回のテスト

わかった 
上記の結果は、テストが正常に完了したことを示しています。

2.4。 段階的な分析例


最初に、すべての基本的な必須モジュールがインポートされました。 unittestモジュール Pythonに組み込まれ、JavaのJUnitに実装されています。 このモジュールは、テストを整理するためのユーティリティを提供します。

selenium.webdriverモジュールは、WebDriverのすべての機能を提供します。 WebDriverは現在、Firefox、Chrome、Ie、およびRemoteの実装をサポートしています。 Keysクラスは、RETURN、F1、ALTなどのキーボードコマンドとの対話を提供します...

 import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys 

unittest.TestCaseから継承したテストクラス。 TestCaseクラスを継承することは、unittestにテストであることを伝える方法です。

 class PythonOrgSearch(unittest.TestCase): 

setUpは初期化の一部であり、このメソッドは、テストクラス内に記述する各テストメソッドの前に呼び出されます。 ここでは、Firefox WebDriverクラスの要素を作成します。

 def setUp(self): self.driver = webdriver.Firefox() 

以下にテスト方法を説明します。 テストメソッドは常にフレーズtestで始まる必要があります。 メソッドの最初の行は、setUpメソッドによって作成されたドライバーオブジェクトへのローカル参照を作成します。

 def test_search_in_python_org(self): driver = self.driver 

driver.getメソッドは、パラメーター内のURLをページにリダイレクトします。 WebDriverは、テストまたはスクリプトに制御を渡す前に、ページが完全にロードされるまで待機します(つまり、onloadイベントは無視されます)。 ロード時にページが大量のAJAXコードを使用する場合、WebDriverは完全にロードされたかどうかを認識しない可能性があることに注意してください。

 driver.get("http://www.python.org") 

次の行は、タイトルに「Python」という単語が含まれているというステートメントです。

 self.assertIn("Python", driver.title) 

WebDriverは、find_element_by_ *メソッドを使用して要素を取得するいくつかの方法を提供します。 たとえば、テキスト入力要素の入力は、find_element_by_nameメソッドによる名前属性によって見つけることができます。 要素検索方法の詳細な説明は、要素検索の章にあります。

 elem = driver.find_element_by_name("q") 

その後、キーストロークを送信します(キーボードからキーを入力するのに似ています)。 selenium.webdriver.common.keysからインポートされたKeysクラスを使用して、特別なコマンドを渡すことができます。

 elem.send_keys("pycon") elem.send_keys(Keys.RETURN) 

ページの応答後、結果があれば取​​得します。 結果を確実に取得するために、次のステートメントを追加します。

 assert "No results found." not in driver.page_source 

tearDownメソッドは、各テストメソッドの後に呼び出されます。 これは、クリーニング操作の方法です。 現在のメソッドは、ブラウザウィンドウを閉じることを実装します。 closeの代わりにquitメソッドを呼び出すこともできます。 quitメソッドはブラウザーを完全に閉じ、closeは1つのタブを閉じます。 ただし、開いているタブが1つだけの場合、デフォルトではほとんどのブラウザーは完全に閉じます。

 def tearDown(self): self.driver.close() 

最終コードは、テストスイートを開始するための標準コード挿入です[__name__と "__main__"の比較は、モジュール(プログラムファイル)が個別のプログラムとして起動されることを意味します( "main"(英語)-"main"、 "main")(別のモジュールからインポートされます)。 モジュールをインポートする場合、モジュール属性__name__は、ディレクトリと拡張子のないファイル名に等しくなります-注 trans。]:

 if __name__ == "__main__": unittest.main() 

2.5。 リモートWebDriverでのSeleniumの使用


リモートWebDriver(リモートWebドライバー)を使用するには、Seleniumサーバーを実行する必要があります。 サーバーを起動するには、次のコマンドを使用します。
  java -jar selenium-server-standalone-2.xxjar 
Seleniumサーバーの起動中に、次のようなメッセージが表示されます。
  15:43:07.541情報-RemoteWebDriverインスタンスはhttp://127.0.0.1:4444/wd/hubに接続する必要があります 
上記の行は、指定されたURLを使用してリモートWebDriverに接続できることを報告しています。 次に例を示します。

 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities driver = webdriver.Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=DesiredCapabilities.CHROME) driver = webdriver.Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=DesiredCapabilities.OPERA) driver = webdriver.Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=DesiredCapabilities.HTMLUNITWITHJS) 

desired_capabilities変数は辞書です。 デフォルトの辞書を使用する代わりに、値を明示的に指定できます。

 driver = webdriver.Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities={'browserName': 'htmlunit', 'version': '2', 'javascriptEnabled': True}) 

次の章に進む

Source: https://habr.com/ru/post/J250921/


All Articles