3

テーブルの一番左の列を取得し、セル内の文字列が私が持っている日付のリストと一致することを確認するテキストを Selenium で書いています。私が持っているコードは次のようになります。

dates = ["20130501", "20130502", "20130506", "20130507", "20130508", "20130509", "20130510", "20130513", "20130514", "20130515"]
mytable = self.driver.find_element(By.ID, "mytable")
datecells = mytable.find_elements(By.CSS_SELECTOR, "tbody td:first-child")
for date, cell in zip(dates, datecells):
    print "'{0}', '{1}'".format(date, cell.text) # For debugging
    #self.assertEqual(date, cell.text)

アサートをコメントアウトしたままにすると、結果として次のように出力されます。

'20130501', ''
"20130502', ''
'20130506', ''
'20130507', ''
'20130508', ''
'20130509', ''
'20130510', ''
「20130513」、「」
「20130514」、「」
'20130515', ''

奇妙なことに、出力にブレークポイントを設定し (PyDev で MyEclipse を使用)、出力前に PyDev Debug の [変数] タブのセルを見ると、適切なテキストが表示され、コードが期待どおりに出力されます。

「20130501」、「20130501」
「20130502」、「20130502」
「20130506」、「20130506」
「20130507」、「20130507」
「20130508」、「20130508」
「20130509」、「20130509」
「20130510」、「20130510」
「20130513」、「20130513」
「20130514」、「20130514」
「20130515」、「20130515」

このデバッガーによってのみ適切に評価できる WebElement .text プロパティの奇妙なオブザーバー効果の癖はありますか、それともステップスルーすることなくセルから適切な値を取得するために待機する必要がある条件がありますか?

4

1 に答える 1

4

PhantomJS の WebDriver で少しテストした後、これは特に Firefox の WebDriver の問題であることがわかり、以前に尋ねられた次の質問が見つかりました: WebElement getText() is an empty string in Firefox if element is not physical visible on the screen

したがって、forループを次のように変更した後

for date, cell in zip(dates, datecells):
    self.driver.execute_script("arguments[0].scrollIntoView(true);", cell)
    print "'{0}', '{1}'".format(date, cell.text)
    self.assertEqual(date, cell.text)

テキストを取得する前に各セルをスクロールして表示するために、期待される出力が得られました。

于 2013-06-18T14:32:29.653 に答える