1. ホーム
  2. python

[解決済み] Selenium Webdriver サブ要素内の要素を見つける

2023-06-25 19:01:07

質問

Selenium (Version 2.28.0) でサブ要素内の要素を検索しようとしていますが、selenium des は検索をサブ要素に限定していないようです。私はこれを間違っているのか、またはサブ要素を検索するためにelement.findを使用する方法がありますか?

例として、私はこのコードで簡単なテストウェブページを作成しました。

<!DOCTYPE html>
<html>
    <body>
        <div class=div title=div1>
            <h1>My First Heading</h1>
            <p class='test'>My first paragraph.</p>
        </div>
        <div class=div title=div2>
            <h1>My Second Heading</h1>
            <p class='test'>My second paragraph.</p>
        </div>
        <div class=div title=div3>
            <h1>My Third Heading</h1>
            <p class='test'>My third paragraph.</p>
        </div>
    </body>
</html>

私のpython(バージョン2.6)のコードは以下のようなものです。

from selenium import webdriver

driver = webdriver.Firefox()

# Open the test page with this instance of Firefox

# element2 gets the second division as a web element
element2 = driver.find_element_by_xpath("//div[@title='div2']")

# Search second division for a paragraph with a class of 'test' and print the content
print element2.find_element_by_xpath("//p[@class='test']").text 
# expected output: "My second paragraph."
# actual output: "My first paragraph."

実行すると

print element2.get_attribute('innerHTML')

2番目の分割からhtmlを返しています。つまり、seleniumはelement2に限定して検索しているわけではありません。

私は、element2のサブ要素を見つけることができるようにしたいです。この投稿は、私のコードが動作するはずであることを示唆している Selenium WebDriverはサブ要素にアクセスします。 が、彼の問題は、タイムアウトの問題によって引き起こされました。

誰かここで何が起こっているのか理解するのを助けてくれますか?

どのように解決するのですか?

XPath 式の冒頭に // で始めると、ドキュメントのルートから検索を開始します。特定の要素からの相対検索を行うには、式の前に . を付けてください。

element2 = driver.find_element_by_xpath("//div[@title='div2']")
element2.find_element_by_xpath(".//p[@class='test']").text