0

アコーディオンスタイルでコンテンツを表示するためにクリックできるdivのブロックがあります。

私はセレンでこのブロックを実行してそれらをすべて開き、最終的にスクリーンショットをキャプチャします。ただし、次のアイテムに進む前に、アコーディオンアイテムが表示されていることを確認する最善の方法がわかりません。

現時点ではテストは実行されていますが、最終的なスクリーンショットには、いくつかのアイテムがまだ閉じられていることが示されています。私のコード:

detailsAccordion = self.ff.find_elements_by_class_name('accordion')
index = 1
for option in detailsAccordion:
    try:
        WebDriverWait(self.ff, 10).until(lambda driver : driver.find_element_by_xpath("//div[@class='accordionContainer']/div["+
            str(index) +"]/h3[1]")).click()
        # Need a WebDriverWait here for style='display: block;' on the current div
    except:
        print "Can't access div #" + unicode(index)
    index = index + 1

次のような行を追加すると、

WebDriverWait(self.ff, 10).until(lambda driver : driver.find_element("//div[@class='accordionContainer']/div["+
                str(index) +"][@style='display: block;']"))

例外が出力されるので、各divのdisplayプロパティに要件を追加することはできますか?

4

1 に答える 1

1

Selenium API が提供するis_displayed()メソッドを使用して、WebElement が表示されているかどうかを確認できます。

Web ページで xpath によって要素を探している場合、Selenium ドライバーは、コードに制御を渡す前に、ページが読み込まれるのを自動的に待機します。WebDriverWait を使用する必要があるとは思いませんでした。

要素が存在しない場合、コードは要素が見つからないという例外を発生させますが、存在する場合、 is_displayed() は、表示されているかどうかに基づいて true または false を返します。

スクリーンショットを撮る前に、アコーディオン項目が表示されているかどうかを確認し、表示されている場合はスクリーンショットを撮ります。

たぶん、implicitWait を使用すると役立つでしょう -

from selenium import webdriver

  ff = webdriver.Firefox()
  ff.implicitly_wait(10) # seconds
于 2012-07-18T09:08:30.233 に答える