0

ページの更新(完全な更新ではなく、JSがDOMを変更する)をトリガーするドロップダウンメニューからオプションを選択して、その選択に基づいてデータを表示するSeleniumユニットテストを作成しています。私のテストケースはPastebinでここで見ることができます

したがって、データがリロードされた後、セレンはループするためのさらなるオプションを見つけることができません。私は実際にはもうループする必要はありません。
がページの H2 要素にあるかどうかを確認するために xpath ルックアップを実行できoption.textましたが、失敗しました...

for option in dropdown.find_elements_by_tag_name('option'):
    if self.ff.find_element_by_xpath("//h2[contains(text(), option.text)"):
        pass    # Employee Selected

次のコードから、この「DOM に接続」エラーを回避できる人はいますか? 基本的に、オプション[1]などを選択して、残りのテストを続行できれば理想的です。

dropdown = self.ff.find_element_by_id('employeeDatabaseSelect')
for option in dropdown.find_elements_by_tag_name('option'):
    try:
        option.click()  # causes JS refresh which you need to wait for
    except Exception, e:
        print 'Exception ', e
else: sys.exit("Error: There are no employees for this employer")
print 'Dropdown: ', dropdown.getText()
WebDriverWait(self.ff, 50).until(lambda driver : driver.find_element_by_xpath("//h2[contains(text(), dropdown.getText())"))

私のスタックトレースは次のようになります。

 [exec] test_process (__main__.viewEmployeeUseCase) ...
 [exec] ERROR
 [exec]
 [exec] ===============================================================
 [exec] ERROR: test_process (__main__.viewEmployeeUseCase)
 [exec] ---------------------------------------------------------------
 [exec] Traceback (most recent call last):
 [exec]   File "viewEmployeeUnitTest.py", line 43, in test_process
 [exec]     print 'Dropdown: ', dropdown.getText()
 [exec] AttributeError: 'WebElement' object has no attribute 'getText'
 [exec]
 [exec] ---------------------------------------------------------------
 [exec] Ran 1 test in 16.063s
 [exec]
 [exec] FAILED (errors=1)
 [exec] Exception  Message: u'Element is no longer attached to the DOM'
 [exec] Exception  Message: u'Element is no longer attached to the DOM'
 [exec] Exception  Message: u'Element is no longer attached to the DOM'
 [exec] Exception  Message: u'Element is no longer attached to the DOM'
 [exec] Exception  Message: u'Element is no longer attached to the DOM'
 [exec] Exception  Message: u'Element is no longer attached to the DOM'
 [exec] Exception  Message: u'Element is no longer attached to the DOM'
 [exec] Dropdown:  Tearing Down!

最後Tearing Down!は、tearDown() 関数から出力されたコメントです。

4

1 に答える 1

2

これまで見てきたように、ページを更新すると、要素参照で奇妙な動作が発生する可能性があります。表示されるもう 1 つの一般的なエラーは、古い要素の例外です。

スタックトレースから、最後から2番目の行を次のように変更しようとします:

print 'Dropdown: ', self.ff.find_element_by_id('employeeDatabaseSelect').getText()

このようにして、要素への新しい参照を取得します。

同様に、問題を引き起こす可能性のある別の領域は次の行です。

for option in dropdown.find_elements_by_tag_name('option'):

繰り返しの間にページが更新されると、dropdown有効でなくなる可能性があります。この場合、私はこれを試します:

  1. すべてのオプションを確認し、それらの値/テキストのリストを保持します
  2. 値/テキスト (要素ではない) のリストを調べて、それに一致するオプション要素を見つけます

繰り返しますが、これはdropdown毎回の新しい参照を使用するためです。

于 2012-07-17T15:34:52.890 に答える