如何使用 Selenium 和 Python 选择下拉菜单项(值或文本)? [复制]
Posted
技术标签:
【中文标题】如何使用 Selenium 和 Python 选择下拉菜单项(值或文本)? [复制]【英文标题】:How can I select a dropdown menu item (value or text) using Selenium and Python? [duplicate] 【发布时间】:2014-08-14 04:32:29 【问题描述】:第一次发帖!
我是 Python 和 Selenium 的新手,但我正在尝试自动化一个基本测试,但我找不到这个问题的答案。
在 ebay.com 主页上,我尝试选择“所有类别”下拉菜单并选择“娃娃与熊”选项(选项值 =“237”)。当我执行我的脚本时,可以访问菜单,但没有选择“Dolls & Bears”选项。测试不返回任何错误。我也尝试过使用 select_by_visible_text。
这是我的代码。感谢您的帮助!
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.ebay.com")
assert "Electronics" in driver.title
elem = driver.find_element_by_id("gh-ac")
elem.send_keys("funny bear")
driver.find_element_by_id("gh-cat").click()
def select_a_value(select):
Select.select_by_value("237").click()
【问题讨论】:
【参考方案1】:欢迎来到堆栈溢出!
您非常接近此代码。 “Select”是一个可以实例化的类,而不仅仅是一个函数库。这是您的脚本的工作版本:
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Firefox()
driver.get("http://www.ebay.com")
assert "Electronics" in driver.title
elem = driver.find_element_by_id("gh-ac")
elem.send_keys("funny bear")
dropdown_web_element = driver.find_element_by_id("gh-cat")
select_box = Select(dropdown_web_element)
time.sleep(1)
select_box.select_by_value("237")
请注意,对 Select 的调用传入了一个值(在本例中为 WebElement)以实例化对象。您可以查看 selenium 源代码以了解其调用方式(Windows 上为 Python27/Lib/site-packages/selenium/webdriver/support/select.py)。
另外,我在其中添加了一个 time.sleep(1)。您偶然发现了硒令人沮丧的事情之一。在网站上异步加载数据可能会导致测试失败,因为它们的运行速度比人类通常单击按钮的速度要快。当您到达脚本中的那个点时,数据可能不存在!处理这个问题的正确方法是动态地等待一段合理的时间,直到你正在寻找的元素在那里。有点超出你所问的范围,但我敢肯定,你很快就会解决这个问题。
祝你好运!
【讨论】:
从您的回复中学到了很多,谢谢!是的,这行得通。我的模块上的格式没有出现在我的帖子中,但我没有使用“导入选择”模块,所以谢谢。此外,我不熟悉在您的代码示例中定义诸如“dropdown_web_element”之类的东西,但我知道它是如何工作的。你知道这叫什么,所以我可以了解它吗?非常感谢! dropdown_web_element 是我为了清楚起见而使用的变量名。它可能是任何东西。 driver.find_element_by_id("gh-cat") 返回对元素的引用。如果要再次引用该元素,则需要为其命名。在本例中,我们使用了 dropdown_web_element。以上是关于如何使用 Selenium 和 Python 选择下拉菜单项(值或文本)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Selenium 和 Python 选择具有 unselectable="on" 属性的剑道下拉元素
如何在 Python 上使用 Selenium 在日历中选择一天?
如何使用 selenium webdriver (python) 选择、复制和粘贴元素中的所有内容
selenium python 针对js生成的下拉列表,如何选择隐藏的选项