selenium3とのpython3実際のWeb自動テストフレームワーク
まず、環境を設定
1、セレン環境を構築します
クライアント:
- pycharm
- python3.6
ドライバ:
- クローム→ChromeDriver
- Firefoxの→FirefoxDriver
- IE→InternetExplorerDriver
セレン
1.1、セレンのインストール
ピップセレン#のインストールインストールを
セレン輸入webdriverを#から輸入
ドライバ= webdriver.Chrome()#Googleのブラウザ起動
driver.get( "http://www.baidu.com")#オープンBaiduのURLの
#の注意:Google Chromeを起動しますインターネットからダウンロードしたGoogleのブラウザミドルウェア、設定するには、かつてのニーズchromedriver.exeを、それを置くのpython のインストールディレクトリの下に
1.2、異なるブラウザを起動するためにスクリプトを使用
ブラウザ構成するブラウザを起動する前に対応するドライバ。
- Chromeは--chromedriver.exe:Googleのブラウザプラグインをドライバのデバッグ
- Firefoxは--geckodrive.exe:Firefoxブラウザのプラグインで、ドライバのデバッグ
- IE --MicrosoftWebDriver.exe:IEブラウザのデバッグプラグ対応ドライブ
上記の3つの exeファイルは、パイソンをダウンロードした後、ディレクトリの下に置かれます
1)Google Chromeを起動します
セレンインポートwebdriverをから
ドライバ= webdriver.Chrome()
driver.get( 'http://www.baidu.com')
2)のFirefoxを起動します。
セレンインポートwebdriverをから
ドライバ= webdriver.Firefox()
driver.get( 'http://www.baidu.com')
3)スタートIEブラウザ
セレンインポートwebdriverをから
ドライバ= webdriver.Ie()
#ドライバー= webdriver.Edge()#勝つ 10 ブートのバージョンのIE ブラウザ、コード行を
driver.get( 'http://www.baidu.com')
2、「登録された言葉があるかどうかを判断するために、このようなページタイトルとして、私たちが望むものと一致使用expected_conditionかどうかを裁判官の下でtitle_containsページタイトル、:
セレンインポートwebdriverをから
selenium.webdriver.supportインポートexpected_conditionsから
インポート時
ドライバ= webdriver.Chrome()
#ドライバー= webdriver.Edge()#勝つ 10 ブートのバージョンのIE ブラウザ、コード行を
driver.get( 'http://www.5itest.cn/register')
time.sleep(5)
is_live = expected_conditions.title_contains(「登録」)#はタイトルページの判断に登録されている単語があります
印刷( 'is_live:'、is_live)
リターンの結果:
is_live:#<selenium.webdriver.support.expected_conditions.title_containsは0x000000000354DEF0でオブジェクト> 存在
異なる方法で配置3、
登録リンクにアクセス: http://www.5itest.cn/registerを、テスト
セレンインポートwebdriverをから
ドライバ= webdriver.Chrome()
driver.get( 'http://www.5itest.cn/register')
driver.find_element_by_id( 'register_email')。send_keys ( "[email protected]")#のメールボックスに塗りつぶし
user_name_node = driver.find_elements_by_class_name( 'コントロール') [1]#の使用クラス名定義は、慎重な取り扱いを必要とします
user_name_node.find_element_by_class_name( 'フォームコントロール') 。send_keys( 'Eric_nan')#のユーザー名での塗りつぶし
driver.find_element_by_name( 'パスワード')。send_keys ( '111111')#のパスワードを入力
driver.find_element_by_xpath( '// * [ID @ = "captcha_code"]')。send_keys( '2222')#は、 コードを埋めます
スクリプトコントロールは、ブラウザを起動し、登録ページにアクセスして、自動的に設定値を入力します:
図4に示すように、決定された要素を使用して可視expected_conditionsあります
セレンインポートwebdriverをから
selenium.webdriver.supportインポートexpected_conditionsから
selenium.webdriver.support.wait輸入WebDriverWaitから
によってselenium.webdriver.common.byインポートから
ドライバ= webdriver.Chrome()
ロケータ=(By.CLASS_NAME、「制御」 )# でクラス名かの方法を見つけるのコントロールを
WebDriverWait(ドライバ1)(expected_conditions.visibility_of_element_located(ロケータ)).until
WebDriverWait番号:2つの引数は、1であるドライバー、別のタイムアウトです(int型タイプ)
Visibility_of_element_located# :のみに表示要素に対応する要素を見つけます。リターン・メモリ・アドレスの場合
5、確認コードを解決する方法を自動的に入力され
1)登録ページフルスクリーンテーマは、()メソッドをdriver.save_screenhot用いて格納され、その後、部分領域コードが保存されたスクリーンショット
傍受領域の一部を使用する必要があり、地元の絵を開き、PILをインストールします。-iインストールPIP
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath( __ FILE__)))# 最初のパスプロジェクト
IMAGE_PATH = os.path.join(BASE_DIR、「イメージ 」、「imooc.png」)#の画像パス、ストレージスクリーンショット後のフルスクリーン画像
code_path = os.path.join(BASE_DIR、 '画像 '、 'code.png')#のCAPTCHAパスを保存
driver.get( 'http://www.5itest.cn/register')
driver.save_screenshot(IMAGE_PATH)#全画面キャプチャ
code_element = driver.find_element_by_id( "getcode_num") #をターゲット文字コード場所
#印刷(code_element.location)#要素を取得(画像)の左上隅(x、y)を座標
#印刷(code_element.size)#要素を取得する(画像)の長さ、幅
left_x = code_element.location [ 'X'] # 左上隅のx 値
top_y = code_element.location [ 'Y'] #左コーナーのY 値
right_x = left_x + code_element.size [ '幅']#右下角X 值
right_y = top_y + code_element.size [ '高']#1 右下角のY 值
イム= Image.open(IMAGE_PATH)#を使用PIL 下の画像を開き、ダウンロードimooc.pngの画像
IMG = im.crop((left_x、top_y 、right_x、right_y))#は、 切り出し部分を指定しました
img.save(code_path)#保存
2)使用showapiRequestは画像検証コード認識を解きます
①は、使用pytesseract画像を識別する問題を抱えています
インストール: PIPはpytesseractをインストール
輸入pytesseract
PILインポートイメージから
画像= Image.open( "E:/imooc2.png")
テキスト= pytesseract.image_to_string(画像)#文字列に画像を変換します
印刷(テキスト)
#のデメリット:機械読み取りは、CAPTCHAのテキストを読む比較的強い干渉するのに適していない絵不規則なフォントを、読み取ることができません
英数字_ファイルを特定するコードを、要求された例を見つけ、SDKをダウンロードします:選択しShowapiRequest.py
プロジェクト、画像の確認コードを読み取るための新しいread_code_img.pyファイルにShowapiRequest.pyファイル:
セキュリティコード:
setting.ShowapiRequest輸入ShowapiRequestから
設定のインポート設定から
R = ShowapiRequest( "http://route.showapi.com/184-4"、 "62666"、 "d61950be50dfgjnr9969f741b8e730f5")
#はShowapiRequest 最初のパラメータは、ワールド・ワイド・ウェブ簡単にソースのWebであるURL 、2番目の引数は、独自のオンラインソースに簡単ですAPPIDを、3番目のパラメータは、オンラインソースへの鍵は簡単です
r.addBodyPara(「タイプID」、「35」)#typeId :いくつかの認証コードを識別する番号を示し、35 : 「3」は、結合英数字コードを表す「5」表す5 桁のコードは、31 :桁の認証コード
r.addBodyPara( "convert_to_jpg"、 "0")
r.addFilePara(「画像」、setting.code_path) #の画像を識別するための追加コード
RES = r.post()
プリント(res.text)#{ "showapi_res_error": ""、 "showapi_res_id": "6f0e4cdb977141b293ea12178ad3d37e"、 "showapi_res_code":0、 "showapi_res_body":{ "ID": "5bac83cc-5637-4e2d-bc91-25a78b527241"、 "結果": "ANLZZ"、 "ret_code":0}}
テキスト= res.json() 'showapi_res_body '] [ '結果']# でJSONの読み出し形式:showapi_res_body 結果値を
印刷(テキスト)#のリターン情報:ANLZZ(正しく識別)
注:このように、比較的高い認識精度
カプセル化され、関連するコード・レジスタ - 初期パッケージ
入力に対応した自動登録情報
6、コンフィギュレーション・ファイルを読み込むパッケージ方法
新INTプロフィール:
#localElement.iniのファイル
[RegisterElement]
USER_EMAIL = ID> register_email
user_email_error = ID> register_emailエラー
USER_NAME = ID> register_nickname
user_name_error = ID> register_nicknameエラー
パスワード= ID> register_password
password_error = ID> register_passwordエラー
code_image = ID> getcode_num
code_text = ID> captcha_code
code_text_error = ID> captcha_codeエラー
register_button = ID>登録-BTN
使用のpython3は、プロファイル情報を読み込むのConfigParserモジュールを付属しています。
setting.settingインポートconfig_ini_dirから
インポートのConfigParser
クラスRead_Ini(オブジェクト):#は初期化
デフ__init __(自己、ノード=なし):
ノードの場合:
self.node =ノード
他:
self.node =「RegisterElement」#ノード構成ファイル
self.cf = self.load_ini()
デフload_ini(自己):#のロード・ファイル
CF = configparser.ConfigParser()#の使用のConfigParserのモジュールは、プロファイル情報を読み出し
cf.read(config_ini_dir)#設定ファイルのパス
リターンCF
デフGET_VALUE(自己、キー): #は、 設定ファイルの取得キーで値の値を
データ= self.cf.get(self.node、キー)
データを返します
#__name__ == '__main__' の場合:
#read_init = Read_Ini()
#印刷(read_init.get_value( 'USER_NAME'))#の结果:ID> register_nickname
7、パッケージの位置決め要素のクラス
#1 find_element.py
util.read_iniインポートRead_Iniから
クラスFindElement(オブジェクト):
デフ__init __(自己、ドライバ):
self.driver =ドライバ
デフget_element(自己、キー):
read_ini = Read_Ini()
データ= read_ini.get_value(キー)
値= data.split( '>')
試してみてください。
== 'ID' であれば:
戻りself.driver.find_element_by_id(値)
== '名前' でのelif:
戻りself.driver.find_element_by_name(値)
== 'className' のことでのelif:
戻りself.driver.find_element_by_class_name(値)
== 'のXPath' でのelif:
戻りself.driver.find_element_by_xpath(値)
他:
戻りself.driver.find_element_by_css(値)
Eなどの例外を除いて:
印刷( "find_element エラーメッセージ:"、E)
Noneを返します
*完全な登録プロセス
1、設定ファイル
1)LocalElement.ini:位置決め要素情報が格納されています
LocalElement.ini
2)setting.py:
setting.py
3)read_ini.py:設定ファイルの設定情報を読み込み、LocalElement.py
read_ini.py
4)find_element.py:位置情報要素を取得します
find_element.py
5)register_function.py:登録メインテスト
register_function.py