2016-08-25 35 views
1

すべて、私はPythonでコードを書く方法の深刻な「愚かな」例を必要としています。いない。私はプログラミングの新人です。私は1日分の記事を見直したので、わかりません。Selenium in Python要素が存在しない場合、If-elseコードを使用する方法

ここに私がしようとしていることがあります。

だから、
from selenium.common.exceptions import NoSuchElementException, staleElementReferenceException 

    elem = driver.find_element_by_partial_link_text('Create Activity') 

    print("Searching for Create Activity.") 

    if elem.is_displayed(): 
     elem.click() # this will click the element if it is there 
     print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!") 
    else: 
     print ("NO LINK FOUND") 

、私は アクティビティを作成するために検索しています...適切な応答を取得します(「アクティビティを作成」)element_by_partial_link_textされるLINKの存在があることを

を提供します。 リンクを作成するとアクティビティが作成されます。クリックしてください!

私の問題はelement_by_partial_link_text('Create Activity')

にマッチしたリンクがない場合、私はそれが私elseステートメントである期待するものを得ることはありませんです。 print ("NO LINK FOUND")

私が手...

トレースバック(最後の最新の呼び出し): ファイル ""、1行目、 ファイルで「C:\プログラムファイル(x86の)\ Python35-32 \ ( "= By.PARTIAL_LINK_TEXT、value = link_text) ファイル" C:\ Program Files(x86)\ libディレクトリの場所を指定してください。 Python 35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py "、行745、find_element {'使用': '値':値})['値'] 実行ファイル self.error_handler.check_response(応答) ファイル "C:¥Program Files(x86)¥Python35-32¥lib¥site-packages¥selenium¥webdriver¥remote¥webdriver.py" check_responseのC:¥Program Files(x86)¥Python35-32¥lib¥site-packages¥selenium¥webdriver¥remote¥errorhandler.py "、194行目、 例外クラスを上げる(メッセージ、画面、スタックトレース) selenium.common。 exceptions.NoSuchElementException:メッセージ:いいえ、そのような要素:要素が見つかりません:{「メソッド」:「部分リンクテキスト」、「セレクタ」:「アクティビティを作成します」}私はオンにPython内セレンを取得するにはどうすればよい

この例外またはエラーは私のスクリプトを停止せずにただ処理しますELSEステートメント。

おかげで、

+0

'try'と' except'文を使用できますか? – DavidG

+0

おそらく、 'driver.find_element_by_partial_link_text( 'アクティビティの作成')は' None'を返し、 'elem.is_displayed()'は 'NoSuchElementException'をスローします。 'if elem:'と 'if elem.is_displayed()'または 'try-except'ブロックのような多くのことがあります。 –

+0

' find_elements'を使用して要素のサイズをチェックする最良の方法例外キャッシュ、提供された回答を参照してください... :) –

答えて

7

あなたは例外をキャッチし、それに応じて行動することができます。

try: 
    elem = driver.find_element_by_partial_link_text('Create Activity') 
    if elem.is_displayed(): 
     elem.click() # this will click the element if it is there 
     print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!") 
except NoSuchElementException: 
    print("...") 

をまた、私はおそらく要素は確かに「クリック可能」であることを確認するテストを変更します:

if elem.is_displayed() and elem.is_enabled(): 
+0

それは働いた!今実際の例があるので、私はちょっと理解し始めています... – th2112

3

find_elementはいずれかの要素を返すか、NoSuchElementExceptionをスローします。したがって、if条件で要素が存在するかどうかを判断する最善の方法は、代わりに、それはあなただけで以下のようにその長さをチェックして、リターンWebElementのリストまたは空のリストのどちらかですので、例外をキャッチする: - 除い/試みるよりも

elems = driver.find_elements_by_partial_link_text('Create Activity') 

if len(elems) > 0 and elems[0].is_displayed(): 
    elems[0].click() 
    print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!") 
else: 
    print ("NO LINK FOUND") 
+1

これもうまくいきました! – th2112

0

さらに簡単にはちょうど)(find_elementsを使用しています。存在しない場合、空のリストを返します。空でない場合、最初に見つかったクリップが見つかりました:found [0] .click()

関連する問題