繁体   English   中英

Python Selenium - 适用于 Chrome、Firefox 和 IE 的通用脚本

[英]Python Selenium - Common Script for Chrome, Firefox & IE

我们目前正在研究 Selenium 作为嵌入在一系列控制器中的 Web 服务器的测试工具。 我希望为所有驱动程序重用相同的 Python (2.7) 代码,但尽管 Chrome 和 Firefox 运行良好,但 IE11(惊喜?)不喜欢它。 IE 打开,但 Python 抛出异常。

起初我以为问题只是 URL 中包含的 user:pwd ......

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(response) ...\\errorhandler.py",第 164 行,在 check_response 中引发 exception_class(message, screen, stacktrace) selenium.common.exceptions。 WebDriverException:消息:您无法导航到 acc:acc@10.169.89.97。 这通常意味着对 COM 方法 IWebBrowser2::Navigate2() 的调用失败。

在第二种情况下:
...line 33, in driver.switch_to.frame("links_frame") # 选择包含下一个元素的 iframe 进行测试 ...\\webdriver\\remote\\switch_to.py", line 64, in frame self._driver.execute (Command.SWITCH_TO_FRAME, {'id': frame_reference})
...\\webdriver.py”,第 173 行,执行 self.error_handler.check_response(response)
...\\webdriver\\remote\\errorhandler.py", line 164, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.UnexpectedAlertPresentException: Message: u'Modal dialog present' – –

IE 很烦人……但问题不应该是 python。 确保将所有保护模式设置为所有区域(启用/禁用)相同。 否则 IEDriver 将在打开后丢失该窗口,这似乎与您遇到的情况类似。

您绝对可以对所有测试使用相同的代码……驱动程序部分发生了变化,但它们都基于相同的基类/接口。 对于python...导入相同的库。

以下是一些 IE 参考: IE11 上的 Selenium WebDriver

回答你问题的第一部分...

起初我以为问题只是 URL 中包含的 user:pwd

你是对的。 现代版本的 IE 不允许您在 URL 中传递基本身份验证凭据。 大多数其他浏览器仍然允许它。

有关解释,请参阅 Microsoft 的知识库文章: 834489

(注意:有一些技巧可以禁用此行为。还有更好的方法来处理身份验证)

你是对的。 现代版本的 IE 不允许您在 URL 中传递基本身份验证凭据。 大多数其他浏览器仍然允许它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM