0

典型的なアコーディオン スタイルでコンテンツを表示/非表示にする一連の div があります。HTML は次のようになります。

 <div class="accordionContainer">
    <div class="accordion">
      <h3>Click This</h3>
      <div class="accordionContent" style="display:none">
      </div>
    </div>
    <div class="accordion">
      <h3>Click This</h3>
      <div class="accordionContent" style="display:none">
      </div>
    </div>
</div>

次に、python で最初の H3 を選択してから、 にあるリンクを開きaccordionContentます。

 WebDriverWait(ff, 10).until(lambda driver : driver.find_element_by_xpath("id('main_content')/div[3]/div/div/div[1]/h3[1]")).click()

 WebDriverWait(ff, 10).until(lambda driver : driver.find_element_by_xpath("id('main_content')/div[3]/div/div/div[1]/div/p/a")).click()

私はこれを実行し、動作するのを見ました。ただし、ほとんどの場合、失敗します。最初の div がクリックされます (小さな矢印が回転してコンテンツが表示されますが、すぐにデフォルトに戻り、エラーが発生するため、2 回クリックされたようです。

 [exec] selenium.common.exceptions.ElementNotVisibleException: Message: u'Element is not currently visible and so may not be interacted with'

奇妙なことに、クリックされたように見えるが開いていない場合は、同じ click() 行をもう一度呼び出すと機能します。

その 2 番目の xpath を進めて、accordionContentが に変更されたことを確認できdisplay: blockますか?

4

1 に答える 1

1

このxpathは機能するはずです:

"//div[@class='accordionContainer']/div[@class='accordion'][1]/div[@class='accordionContent' and contains(@style, 'block')]"

または、構造がかなり安全な場合は、次のことができます。

"//div[@class='accordionContainer']/div[1]/div[contains(@style, 'block')]"

注:「アコーディオン」divの終了タグが(表示されている開始タグではなく)終了タグであると想定されている例では、これは単なるタイプミスであると想定しています。

于 2012-04-12T14:09:35.200 に答える