如何单击下拉列表选项?

时间:2018-02-06 15:51:16

标签: python python-3.x selenium webdriver

我有一个按钮,当我点击它时,我会得到一个下拉列表。我的问题是,我想点击此下拉列表中的一个选项,但我不知道如何引用它。

我试图表现得好像这是一个列表框,我使用了" Select"模块,但我失败了例外。我的目的是能够参考此下拉列表中的任何选项。可能是HTML代码缺少唯一的href值吗?



<input name="Port 19" value="Uplink" class="ExtendedButton" onclick="SelectFrame('Uplink-200')" id="Port-19" style="width: 84px; display: inline;" type="button">
<script>writeUplinkDropDown()</script>
<div class="dropdown-content">
<a href="#" onclick="SelectFrame("Uplink-200")">200G</a>  
<a href="#" onclick="SelectFrame("Port-19")">100G #1</a>  
<a href="#" onclick="SelectFrame("Port-20")">100G #2</a>
</div>
   
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

您需要做的第一件事是打开下拉菜单。菜单打开后,您可以使用以下任何选择器示例单击您发布的任何选项:

npm i --save svg4everybody

答案 1 :(得分:0)

Selenium的Select类仅适用于原生<select>元素。由于您已使用自定义HTML实现了下拉列表,因此无法使用它。

相反,为了选择自定义下拉列表中的一个选项,您需要执行真实用户的每个操作:

  • 点击打开下拉列表的按钮,然后
  • 点击所需选项的链接。

注意:在网页上搜索元素时,请始终尝试使用与真实用户相同的条件。真实用户会查找带有一些有意义文本的链接,例如“200G”;他们去搜索寻找特定onclick属性的源代码。 (更重要的是,onclick属性是页面实现的一部分,而不是界面,不应该依赖于它,因为它可能随时改变。)

1。使用Selenium

Selenium没有提供查找按钮的显式方法,但您可以使用CSS或XPath来执行此操作:

driver.find_element_by_css_selector("input[type='button'][value='Uplink']")
driver.find_element_by_xpath("//input[@type = 'button'][@value = 'Uplink']")

要查找链接,Selenium可以方便地提供find_element_by_link_text()

driver.find_element_by_link_text("200G").click()
driver.find_element_by_link_text("100G #1").click()
driver.find_element_by_link_text("100G #2").click()

2。使用Capybara(使用Selenium)

裸硒可以变幻无常。该链接可能尚未在DOM中。或者它可能还不可见。

capybara-py透明地解决了这些问题:

page.click_button("Uplink")

page.click_link("200G")
page.click_link("100G #1")
page.click_link("100G #2")