给出以下站点和定位器:
https://ultimateqa.com/automation
XPATH
CONTAINER = (By.XPATH, '//ul[@class="bottom-nav"]')
MENU = (By.XPATH, '//li[contains(@class, "menu-item")]')
CSS
BOTTOM_NAV = (By.CSS_SELECTOR, '.bottom-nav')
MENU_ITEM = (By.CSS_SELECTOR, '.menu-item')
我需要在 BOTTOM_NAV 中找到 MENU_ITEMS 的数量。
使用嵌套 CSS 时,它可以正常工作并返回预期的菜单项数量,即 7: parent_css_element.find_elements(css_element)
当尝试相同但使用 XPATH 定位器时,它不起作用,父元素内的元素更多 21 甚至更多: parent_xpath_element.find_elements(xpath_element)
我试图弄清楚为什么在嵌套元素中搜索不能使用 xpath 定位器,但可以使用 css 选择器正常工作?
在嵌套元素中搜索时 CSS 选择器和 XPath 定位器之间的行为差异可能是由于它们处理搜索上下文的方式所致。 CSS 选择器自然地维护嵌套元素内的上下文,而 XPath 定位器可能需要在 XPath 表达式的开头使用点 (.) 显式指定上下文。添加点 (.) 可确保 XPath 定位器在特定父元素内搜索。
致以诚挚的问候
参考以下代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://ultimateqa.com/automation")
wait = WebDriverWait(driver, 20)
# Below line can be used to close the subscribe pop-up which appears intermittently
# wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@class='formkit-close']"))).click()
# Store parent element
parent_element = wait.until(EC.visibility_of_element_located((By.XPATH, '//ul[@class="bottom-nav"]')))
# Store all the li elements within parent element
count = parent_element.find_elements(By.XPATH, "li")
# print count of li elements
print(len(count))
控制台结果:
7
Process finished with exit code 0