0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pythonでtryの中にifを入れる【selenium】

Last updated at Posted at 2019-03-19

やりたかったことの最終型を先に書く。
使用ツールはanacondaとspyder。

test.py
def test(huga)
    try:
        # 要素1の取得
        hoge_1 = driver.find_element_by_xpath("//*[@class='hoge class'").text
        # 要素2の取得
        piyo_1 = driver.find_element_by_xpath("//*[@id='root']/div/div/span").text
        # 上記パスの値を変えるシステムをクリック
        driver.find_element_by_xpath("//*[@id='root']/div").click
        # 要素1と同パスの要素を取得
        hoge_2 = driver.find_element_by_xpath("//*[@class='hoge class'").text
        # 要素2と同パスの要素を取得
        piyo_2 = driver.find_element_by_xpath("//*[@id='root']/div/div/span").text
        # 要素1変更前と変更後で差異が出たか判定
        if hoge_1 == hoge_2:
            result = "NG(要素1の差異無し)"
        # 要素2変更前と変更後で差異が出たか判定
        elif piyo_1 == piyo_2:
            result = "NG(要素2の差異無し)"
        # 上記二つの判定に掛からなかったらelseへ進む
        else:
            result = "OK(要素1と要素2の変更を確認)"
    # xpath不整合時のエラー(ifに入る前にエラーになったらここ)
    except:
        result = "NG(要素取得失敗)"
    # 結果はどうあれ、resultの値を返す
    return result

やりたいこと

tryの中にifを入れ、二つの要素を見た結果を返す。途中で何かミスったら共通のNGになる処理がしたい。
あと値を変える為のクリックについては至極個人的な処理なもんでたぶん使う人はいないので、基本的に消して頂きたい。
上記のコードは自作の別プログラムの参照(ローカルライブラリのインポート)をしているので、そちらに値を返すためにdefとreturnを使用している。
たぶんfinallyを付けたほうが良いんだろうけど、これでも動くから放置。

一つのプログラム内での処理

別のプログラムを参照しない、単体で処理する場合。
一つの要素を比較して出力結果をprintにした。
一応クリックも消してある。

test.py
try:
    # 要素1の取得
    hoge = driver.find_element_by_xpath("//*[@class='hoge class'").text
    # 要素2の取得
    piyo = driver.find_element_by_xpath("//*[@class='piyo class'").text
    # 差異の判定
    if hoge == piyo:
        print("NG(差異無し)")
    # 判定に掛からなかったらelseへ進む
    else:
        print("OK(差異有り)")
# xpath不整合時のエラー(ifに入る前にエラーになったらここ)
except:
    print("NG(要素取得失敗)")

変数の値を出力

別プログラムの参照でreturnを使う時に、変数の値を見たいって場合。
単体ならprint(変数)でいけるけど、この場合どうしたもんかと少し詰まった。
最後のreturnに見たい値の変数を入れて「,」で区切る。つまり最後の行だけしか変わっていない。

test.py
def test(huga)
    try:
        # 要素1の取得
        hoge_1 = driver.find_element_by_xpath("//*[@class='hoge class'").text
        # 要素2の取得
        piyo_1 = driver.find_element_by_xpath("//*[@id='root']/div/div/span").text
        # 上記パスの値を変えるシステムをクリック
        driver.find_element_by_xpath("//*[@id='root']/div").click
        # 要素1と同パスの要素を取得
        hoge_2 = driver.find_element_by_xpath("//*[@class='hoge class'").text
        # 要素2と同パスの要素を取得
        piyo_2 = driver.find_element_by_xpath("//*[@id='root']/div/div/span").text
        # 要素1変更前と変更後で差異が出たか判定
        if hoge_1 == hoge_2:
            result = "NG(要素1の差異無し)"
        # 要素2変更前と変更後で差異が出たか判定
        elif piyo_1 == piyo_2:
            result = "NG(要素2の差異無し)"
        # 上記二つの判定に掛からなかったらelseへ進む
        else:
            result = "OK(要素1と要素2の変更を確認)"
    # xpath不整合時のエラー(ifに入る前にエラーになったらここ)
    except:
        result = "NG(要素取得失敗)"
    # 結果はどうあれ、resultの値を返す
    return result,hoge_1,piyo_1,hoge_2,piyo_2
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?