如何使用Selenium和Python选择下拉菜单项(值或文本)?
这是我第一次发帖!
我刚开始学习Python和Selenium,想要自动化一个简单的测试,但我找不到解决这个问题的方法。
在eBay的主页上,我想选择“所有类别”的下拉菜单,然后选择“玩偶和熊”这个选项(选项值 = "237")。当我运行我的脚本时,菜单是可以打开的,但“玩偶和熊”这个选项并没有被选中。测试没有返回任何错误。我也尝试过使用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 个回答
4
欢迎来到Stack Overflow!
你的代码已经很接近正确了。“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)。你碰到了selenium的一个常见问题。网站上数据的异步加载可能会导致测试失败,因为它们运行的速度比人类点击按钮的速度快。等你到达脚本的那个点时,数据可能还没加载出来!处理这个问题的正确方法是动态等待一段合理的时间,直到你想要的元素出现。这有点超出你问的问题范围,但我相信你很快就会遇到这个问题。
祝你好运!