第一次发帖!
我是Python和Selenium的新手,但我尝试自动化基本测试,但我找不到这个问题的答案。
在主ebay.com页面上,我试图选择"所有类别"下拉菜单,然后选择"娃娃&熊"选项(选项值=" 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()
答案 0 :(得分:4)
欢迎使用Stack Overflow!
您非常接近此代码。 "选择"是一个可以实例化的类,而不仅仅是一个函数库。这是您的脚本的工作版本:
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)。你偶然发现了硒的一个令人沮丧的事情。在网站上异步加载数据会导致测试失败,因为它们比人类通常单击按钮运行得更快。当你到达脚本中的那一点时,数据可能不存在!处理此问题的正确方法是动态等待一段合理的时间,直到您要查找的元素存在。有点超出你所要求的范围,但你很快就会处理这个问题,我确定。
祝你好运!