Selenium Webdriver finding an element in a sub-element
If you start an XPath expression with //
, it begins searching from the root of document. To search relative to a particular element, you should prepend the expression with .
instead:
element2 = driver.find_element_by_xpath("//div[@title='div2']")
element2.find_element_by_xpath(".//p[@class='test']").text
Use the following:
element2 = driver.find_element_by_cssselector("css=div[title='div2']")
element2.find_element_by_cssselector("p[@class='test']").text
Please let me know if you have any problems.
I guess,we need use method "By" from webdriver.common.by when use "driver.find_element".
So...the code must be:
from selenium import webdriver
driver = webdriver.Firefox()
from selenium.webdriver.common.by import By
element2 = driver.find_element(By.XPATH, "//div[@title='div2']")
element2.find_element(By.XPATH, ".//p[@class='test']").text
This is how you search for element or tag in CSS subclass and I believe that it works for multilevel situation as well:
Sample HTML:
<li class="meta-item">
<span class="label">Posted:</span>
<time class="value" datetime="2019-03-22T09:46:24+01:00" pubdate="pubdate">22.03.2019 u 09:46</time>
</li>
This is how you would get pubdate
tag value for example.
published = driver.find_element_by_css_selector('li>time').get_attribute('datetime')