为什么Selenium可以使用Chrome和Firefox点击单选按钮,但在ie9上却失败了?

2024-10-03 04:28:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python3.4和Selenium Webdriver python bindings。我在windows机器上运行。 当我使用Selenium Chrome和Firefox webdrivers时,下面的脚本可以测试我的网站。但是,当我切换到IE webdriver时,它失败了。这是我的剧本:

driver = webdriver.Ie()               # Line #1
appURL = ("http://localhost:3000")
driver.maximize_window()
driver.get(appURL)


print("Waiting for 'MyRadio' to be present")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID,'MyRadioButtonID')))
print("'MyRadio' is present")


myRadioBtn = driver.find_element_by_id("MyRadioButtonID")
print("myRadioBtn = %s" % myRadioBtn)
print('myRadioBtn.get_attribute("disabled") = %s' % myRadioBtn.get_attribute("disabled"))
print('myRadioBtn.get_attribute("class") = %s' % myRadioBtn.get_attribute("class"))
print('myRadioBtn.get_attribute("data-name") = %s' % myRadioBtn.get_attribute("data-name"))
print('myRadioBtn.get_attribute("data-key") = %s' % myRadioBtn.get_attribute("data-key"))
print('myRadioBtn.get_attribute("name") = %s' % myRadioBtn.get_attribute("name"))
print('myRadioBtn.get_attribute("type") = %s' % myRadioBtn.get_attribute("type"))
print('myRadioBtn.is_enabled() = %s' % myRadioBtn.is_enabled())
print('myRadioBtn.is_displayed() = %s' % myRadioBtn.is_displayed())
print('dir(myRadioBtn) = %s' % dir(myRadioBtn))
print("\n")


print("About to click 'MyRadio'")
time.sleep(3)
myRadioBtn.click()               # Line #28


print('myRadioBtn.get_attribute("value") = %s' % myRadioBtn.get_attribute("value"))
print("Clicked 'MyRadio' 1")

正如我前面所说的,这对于Chrome和Firefox都很好。但是,当我把第1行改为“Ie”时,第28行就失败了。我安装了IE9。错误消息是"ElementNotVisibleException: Message: 'Cannot click on element'"这种情况100%都会发生。下面是该故障产生的输出。在

^{pr2}$

为什么使用Firefox和Chrome驱动程序可以点击这个单选按钮,但不能用IE?我可以清楚地看到单选按钮是可见的。手动,我可以点击它。那么硒为什么不能呢?在


Tags: namedatagetisdriverseleniumattributeelement
3条回答

Selenium Internet Explorer web驱动程序不是浏览器的本机驱动程序,在查找屏幕上的元素时经常出现问题。我怀疑这就是你的问题所在。在

您应该尝试禁用浏览器本机事件。感谢吉姆·埃文斯如此宽泛地解释Native event

profile = driver = webdriver.Ie() 
profile.native_events_enabled = False
driver = webdriver.Ie(profile)

首先,尝试将预期条件更改为^{}

An expectation for checking that an element is present on the DOM of a page and visible. Visibility means that the element is not only displayed but also has a height and width that is greater than 0.

请注意,您不需要再次找到该按钮,它将返回web元素:

element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'MyRadioButtonID')))
element.click()

此外,对于IE,设置更高的implicit wait timeout可能会产生积极影响:

^{pr2}$

相关问题 更多 >