我们目前正在研究Selenium作为嵌入在一系列控制器中的Web服务器的测试工具。我希望为所有驱动程序重用相同的Python(2.7)代码,但尽管Chrome和Firefox运行良好,IE11(惊喜?)并不喜欢它。 IE打开但随后Python抛出异常。
起初我认为这个问题只与用户有关:pwd包含在URL ...
中driver.get("http://" + "acc:acc@10.169.89.97")
但即使删除登录信息并手动输入登录信息,后续代码......
(driver.switch_to.frame("links_frame")
然后也失败了。
导致此问题的驱动程序之间是否存在差异?我已经读过其他人成功地为所有浏览器重复使用相同的代码,所以必须弄清楚我可能做错了吗?
详细说明:
首先......
...第25行,在driver.get中(" http://" +" acc:acc@10.169.89.97")
... \ webdriver.py",第185行,在get self.execute中(Command.GET,{' url':url})
... webdriver.py",第173行,执行self.error_handler.check_response(响应)... \ errorhandler.py",第164行,在check_response中引发exception_class(message,screen,stacktrace)selenium。 common.exceptions.WebDriverException:消息:u'无法导航到acc:acc@10.169.89.97。这通常意味着对COM方法IWebBrowser2 :: Navigate2()的调用失败。'
在第二个例子中:
...第33行,在driver.switch_to.frame中(" links_frame")#选择包含下一个元素的iframe进行测试... \ webdriver \ remote \ switch_to.py",第64行,在框架self._driver.execute(Command.SWITCH_TO_FRAME,{' id':frame_reference})
... \ webdriver.py",第173行,执行self.error_handler.check_response(响应)
... \ webdriver \ remote \ errorhandler.py",第164行,在check_response中引发exception_class(message,screen,stacktrace)selenium.common.exceptions.UnexpectedAlertPresentException:消息:u'模态对话框存在' - -
答案 0 :(得分:1)
IE很烦人......但问题不应该是python。确保将所有区域的所有保护模式设置设置为相同(启用/禁用)。否则IEDriver会在打开后丢失窗口,这与您遇到的情况类似。
对于所有测试,您绝对可以使用相同的代码...驱动程序部分会更改,但它们都基于相同的基类/接口。对于python ...导入相同的库。
以下是一些IE引用:Selenium WebDriver on IE11
答案 1 :(得分:1)
回答你问题的第一部分......
起初我认为问题只是 与用户:pwd包含在URL
中
你是对的。现代版本的IE不允许您在URL中传递基本身份验证凭据。大多数其他浏览器仍然允许它。
有关说明,请参阅Microsoft的知识库文章:834489
(注意:有一些黑客可以禁用此行为。还有更好的方法来处理身份验证)
答案 2 :(得分:1)
您是正确的。 IE的现代版本不允许您在URL中传递基本身份验证凭据。其他大多数浏览器仍然允许它。