我如何使用python硒单击带下拉菜单的导航栏

时间:2018-06-20 03:26:13

标签: python selenium selenium-webdriver automated-tests selenium-chromedriver

我想单击“页面1”以显示子菜单的显示列表 我使用的python代码

driver.find_element_by_xpath("nav/div/ul/li[2]/a").click()


网站代码:

<ul class="nav navbar-nav">
  <li class="active"><a href="#">Home</a></li>
  <li class="dropdown">
    <a class="dropdown-toggle" data-toggle="dropdown" href="#">Page 1
    <span class="caret"></span></a>
    <ul class="dropdown-menu">
      <li><a href="#">Page 1-1</a></li>
      <li><a href="#">Page 1-2</a></li>
      <li><a href="#">Page 1-3</a></li>
    </ul>
  </li>
  <li><a href="#">Page 2</a></li>
  <li><a href="#">Page 3</a></li>
</ul>

Image of nav

2 个答案:

答案 0 :(得分:0)

因为您的要求是“ 我要单击“页面1”以显示子菜单的显示列表”。

可以使用 linkText 而不是绝对的 xpath

parent_page1 = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.LINK_TEXT, "Page 1")))  
parent_page1.click()  

如果此 linkText 对您不起作用,则可以使用相对的xpath:

parent_page1 = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='dropdown-toggle' and contains(text(),'Page 1')]")))  
parent_page1.click()  

请注意,当且仅当此代码是可单击的时,此代码才会单击第1页。

如果这是悬停操作,则可以继续执行操作链

注意::这是给父Page1的。不适合孩子。并根据您尝试过的nav/div/ul/li[2]/a

答案 1 :(得分:0)

您的x路径不正确。任何x路径均以 /或// 开头。这可能是问题所在。

尝试使用x路径//nav/div/ul/li[2]/a

以代码

driver.find_element_by_xpath("//nav/div/ul/li[2]/a").click()

我想,您正在使用w3school bootstrap navigation bar。如果是,则页面在框架内,因此首先需要切换到如下框架。

driver.switch_to_frame("iframeResult")
driver.find_element_by_xpath("//nav/div/ul/li[2]/a").click()