selenium自動化テスト動的ページの抽出大全
5464 ワード
目次一:ブラウザ情報テスト 2 2:ノードの検索 三:テスト動作 四:ノード情報を取得する 五:サブページFrame を切り替える六、遅延要求 7:前進と後退 8:Cookies 8:タブ処理 九:捕獲異常 ここでの使い方を説明すると、インストール構成は詳しく説明されません.私の好きなブラウザドライバはChromeDriverとインタフェースのないPhantomJSです.
次のコードでブラウザを初期化します.
フォームを塗りつぶしたり、クリックをシミュレートしたり、入力ボックスに文字を入力したりするには、まず位置を知る必要がありますが、seleniumは次のようなノードを検索する方法を提供しています.
検索方法
説明
find_element_by_id
idでラベルを検索
find_element_by_name
nameプロパティによるラベルの検索
find_element_by_xpath
xpathでラベルを検索
find_element_by_link_text
リンクされたテキストでラベルを検索
find_element_by_partial_link_text
リンクされたキーワードでラベルを検索
find_element_by_tag_name
ラベル名によるラベルの検索
find_element_by_class_name
classのプロパティでラベルを検索
find_element_by_css_selector
cssセレクタによるラベルの検索
もう一つの一般的な方法はfind_ですElement()は2つのパラメータを伝達し、1つはByである.検索方法、1つはfind_などの値です.Element(By.ID,id)とfind_element_by_id結果は一致した.
複数のノードを検索する場合、find_のような単一のノードを検索する方法に直接sを追加します.elements_by_nameまたはfind_Elements(By.NAME,name)は、リスト内の各ノードがWebElementタイプである.
seleniumは、ブラウザを駆動していくつかの操作を実行することができます.つまり、ブラウザにシミュレーションを実行させることです.以下は一般的な方法のまとめです.
方法
説明
send_keys
テキストの入力
clear
テキストをクリア
click
ボタンをクリック
マウスドラッグ、キーボードボタンなど、特定の実行オブジェクトがないインタラクティブな操作があります.これらの比較的複雑な動作チェーンの方法で実行されます.ここはしばらく使えないので,先に省略する.
用execute_script()メソッドはJavaScriptの実行をシミュレートすることができ,基本的にすべての複雑な動作はJavaScriptを実行する方法で実現できる.
用get_attribute()メソッドを使用して、ノードのプロパティを取得します. ノードのテキスト値をtextプロパティで取得します. はid属性でノードidを取得する. locationプロパティを使用して、ページ内のノードの相対的な位置を取得します. 用tag_nameプロパティを使用してラベル名を取得します. はsizeプロパティでノードのサイズを取得します.
ページにはiframe,すなわちサブフレームというノードがあり,ページのサブページに相当する.Webページが開くと、デフォルトでは親フレーム内で操作され、子フレームのノードを取得するにはswitch_を使用します.to.frame()メソッドを切り替えます. 用switch_to.parent_frame()は、親ページの内容を取得できます.
seleniumではget()メソッドは、Webフレームワークのロードが完了した後に実行を終了します.この場合、Webソースを取得すると、ブラウザが完全にロードしたページではない可能性があります.追加のajaxリクエストがあれば、Webソースも正常に取得できるとは限りません.一定時間待機し、動的Webソースがすべてロードされることを確認する必要があります.プルトニウム待機方式には2つあり,1つは暗黙的待機であり,1つは明示的待機である.
暗黙的な待機は一般的な待機であり、テストを実行するときは、先に待機してから、次のステップを行い、implicitly_wait()で、パラメータは時間です.
暗黙的に待つ効果はそれほどよくありませんが、一定の時間を規定しているだけで、Webページのロード時間はネットワーク条件の影響を受けます.ここでは、検索するノードを指定し、最長待機時間を指定し、所定の時間内にロードして戻り、ロードできない場合は例外を放出する明示的な待機方法があります.例は次のとおりです.
次はすべての待機条件です.
待機条件
説明
title_is
タイトルはある内容です
title_contains
タイトルに内容が含まれています
presence_of_all_elements_located
ノードがロードされているかどうか
visibility_of_element_located
ノードが表示されるかどうか
visibility_of
ノードが表示されるかどうか、ノードオブジェクトに入力
presence_of_all_elements_located
すべてのノードをロード
text_to_be_present_in_element
ノードテキストにテキストが含まれています
text_to_be_present_in_element_value
ノード値にテキストを含める
frame_to_be_available_and_switch_to_it
ロードと切り替え
invisibility_of_element_located
ノードが表示されない
element_to_be_clickable
ノードクリック可能
staleness_of
ノードにDOMが存在するかどうかを判断し、ページがリフレッシュされたかどうかを判断します.
element_to_be_selected
ノード選択可能、ノードオブジェクトへの転送
element_located_to_be_selected
ノード選択可能、入力ロケータグループ
element_selection_state_to_be
入力ノードオブジェクトとステータスは、等しくTrueを返します.そうでなければFalseを返します.
element_located_selection_state_to_be
入力したロケータグループとステータスは、等しくTrueを返します.そうでなければFalseを返します.
alert_is_present
警告が表示されるかどうか
ジルコニウムselenium試験はback()法で後退しforward()法で前進した.
seleniumを使用するとCookiesを容易に操作できます. 用get_Cookies()メソッドは、すべてのCookiesを取得します. 用add_Cookies()メソッドはCookiesを追加します. 用delete_all_Cookies()とdelete_Cookies()メソッドCookiesを削除します.
Webページにアクセスすると、各タブが開き、seleniumでもタブを操作できます.
用execute_scriptメソッドJavaScript文を実行します.ここでwindow_handlesは現在開いているすべてのタブを取得し、タブの代名詞リストを返します.ブラウザでwindow_handles[index]はindexインデックスに対応するタブにジャンプできます.
例外をキャプチャするには、try-except-finallyという文がよく使用されます.異なるエラーでは、ネットワーク接続、コード実行時間のタイムアウト、データが見つかりません.
一:ブラウザ情報テスト
1.ブラウザの初期化
次のコードでブラウザを初期化します.
from selenium import webdriver
# browser ,
browser = webdriver.Chrome()
2.Webページへのアクセス
browser.get('url ')
#
print(browser.page_source)
browser.close() #
二:ノードの検索
フォームを塗りつぶしたり、クリックをシミュレートしたり、入力ボックスに文字を入力したりするには、まず位置を知る必要がありますが、seleniumは次のようなノードを検索する方法を提供しています.
1.単一ノード
検索方法
説明
find_element_by_id
idでラベルを検索
find_element_by_name
nameプロパティによるラベルの検索
find_element_by_xpath
xpathでラベルを検索
find_element_by_link_text
リンクされたテキストでラベルを検索
find_element_by_partial_link_text
リンクされたキーワードでラベルを検索
find_element_by_tag_name
ラベル名によるラベルの検索
find_element_by_class_name
classのプロパティでラベルを検索
find_element_by_css_selector
cssセレクタによるラベルの検索
もう一つの一般的な方法はfind_ですElement()は2つのパラメータを伝達し、1つはByである.検索方法、1つはfind_などの値です.Element(By.ID,id)とfind_element_by_id結果は一致した.
2.複数のノード
複数のノードを検索する場合、find_のような単一のノードを検索する方法に直接sを追加します.elements_by_nameまたはfind_Elements(By.NAME,name)は、リスト内の各ノードがWebElementタイプである.
三:テスト動作
1.シンプルなインタラクション
seleniumは、ブラウザを駆動していくつかの操作を実行することができます.つまり、ブラウザにシミュレーションを実行させることです.以下は一般的な方法のまとめです.
方法
説明
send_keys
テキストの入力
clear
テキストをクリア
click
ボタンをクリック
2.特殊なインタラクション
マウスドラッグ、キーボードボタンなど、特定の実行オブジェクトがないインタラクティブな操作があります.これらの比較的複雑な動作チェーンの方法で実行されます.ここはしばらく使えないので,先に省略する.
3.JavaScriptのシミュレーション実行
用execute_script()メソッドはJavaScriptの実行をシミュレートすることができ,基本的にすべての複雑な動作はJavaScriptを実行する方法で実現できる.
四:ノード情報の取得
用get_attribute()メソッドを使用して、ノードのプロパティを取得します. ノードのテキスト値をtextプロパティで取得します. はid属性でノードidを取得する. locationプロパティを使用して、ページ内のノードの相対的な位置を取得します. 用tag_nameプロパティを使用してラベル名を取得します. はsizeプロパティでノードのサイズを取得します.
五:サブページFrameの切り替え
ページにはiframe,すなわちサブフレームというノードがあり,ページのサブページに相当する.Webページが開くと、デフォルトでは親フレーム内で操作され、子フレームのノードを取得するにはswitch_を使用します.to.frame()メソッドを切り替えます. 用switch_to.parent_frame()は、親ページの内容を取得できます.
六、遅延要求
seleniumではget()メソッドは、Webフレームワークのロードが完了した後に実行を終了します.この場合、Webソースを取得すると、ブラウザが完全にロードしたページではない可能性があります.追加のajaxリクエストがあれば、Webソースも正常に取得できるとは限りません.一定時間待機し、動的Webソースがすべてロードされることを確認する必要があります.プルトニウム待機方式には2つあり,1つは暗黙的待機であり,1つは明示的待機である.
1.暗黙的な待機
暗黙的な待機は一般的な待機であり、テストを実行するときは、先に待機してから、次のステップを行い、implicitly_wait()で、パラメータは時間です.
2.明示的な待機
暗黙的に待つ効果はそれほどよくありませんが、一定の時間を規定しているだけで、Webページのロード時間はネットワーク条件の影響を受けます.ここでは、検索するノードを指定し、最長待機時間を指定し、所定の時間内にロードして戻り、ロードできない場合は例外を放出する明示的な待機方法があります.例は次のとおりです.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
browser.get('url ')
# 20s
wait = WebDriverWait(browser,20)
# expected_conditions, presence_of_element_located
input = wait.until(EC.presence_of_element_located(By.ID,'a'))
# , element_to_be_clickable ,10 ,
button = wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,'.btn-ss'))
print(input,button)
次はすべての待機条件です.
待機条件
説明
title_is
タイトルはある内容です
title_contains
タイトルに内容が含まれています
presence_of_all_elements_located
ノードがロードされているかどうか
visibility_of_element_located
ノードが表示されるかどうか
visibility_of
ノードが表示されるかどうか、ノードオブジェクトに入力
presence_of_all_elements_located
すべてのノードをロード
text_to_be_present_in_element
ノードテキストにテキストが含まれています
text_to_be_present_in_element_value
ノード値にテキストを含める
frame_to_be_available_and_switch_to_it
ロードと切り替え
invisibility_of_element_located
ノードが表示されない
element_to_be_clickable
ノードクリック可能
staleness_of
ノードにDOMが存在するかどうかを判断し、ページがリフレッシュされたかどうかを判断します.
element_to_be_selected
ノード選択可能、ノードオブジェクトへの転送
element_located_to_be_selected
ノード選択可能、入力ロケータグループ
element_selection_state_to_be
入力ノードオブジェクトとステータスは、等しくTrueを返します.そうでなければFalseを返します.
element_located_selection_state_to_be
入力したロケータグループとステータスは、等しくTrueを返します.そうでなければFalseを返します.
alert_is_present
警告が表示されるかどうか
七:前進と後退
ジルコニウムselenium試験はback()法で後退しforward()法で前進した.
八:Cookies
seleniumを使用するとCookiesを容易に操作できます. 用get_Cookies()メソッドは、すべてのCookiesを取得します. 用add_Cookies()メソッドはCookiesを追加します. 用delete_all_Cookies()とdelete_Cookies()メソッドCookiesを削除します.
八:タブ処理
Webページにアクセスすると、各タブが開き、seleniumでもタブを操作できます.
browser.execute_script('windows.open()')
print(window_handles)
browser.switch_to_window(browser.window_handles[1])
用execute_scriptメソッドJavaScript文を実行します.ここでwindow_handlesは現在開いているすべてのタブを取得し、タブの代名詞リストを返します.ブラウザでwindow_handles[index]はindexインデックスに対応するタブにジャンプできます.
九:異常の捕獲
例外をキャプチャするには、try-except-finallyという文がよく使用されます.異なるエラーでは、ネットワーク接続、コード実行時間のタイムアウト、データが見つかりません.