使用 WebDriver 针对不同的平台(浏览器、操作系统)?

Posted

技术标签:

【中文标题】使用 WebDriver 针对不同的平台(浏览器、操作系统)?【英文标题】:Targeting different platforms (Browser, OS) using WebDriver? 【发布时间】:2013-12-06 06:19:27 【问题描述】:

我是使用 WebDriver 进行自动化测试的新手,所以我有几个问题只是想弄清楚一些事情。在几页上,我看到了在不同平台上执行 WebDriver 测试的示例,这些示例仅针对浏览器或操作系统的功能进行定位。

capability= DesiredCapabilities.firefox();
capability.setBrowserName("firefox"); 
capability.setPlatform(org.openqa.selenium.Platform.ANY);

capability= DesiredCapabilities.internetExplorer();
capability.setBrowserName("iexplore"); 
capability.setPlatform(org.openqa.selenium.Platform.WINDOWS);

如中所述: Executing tests Concurrently on different OS and Browsers with WebDriver using Java and TestNG

那么,如果我理解正确的话,实际上可以通过使用 Selenium 提供的库在不同的操作系统和浏览器上运行测试并验证这些测试吗?

如果是这样,这些测试对于典型的跨浏览器/平台 html/javascript 问题的准确度如何?

谢谢

【问题讨论】:

您实际上需要拥有这些机器和浏览器(或使用网格)才能使其工作。但是,如果您可以设置它,它们是非常准确的。 谢谢。你能指出我正确的方向吗?在哪里可以找到有关此主题的说明? 【参考方案1】:

这是一个很好的问题。我将尝试将其分解为更小的信息包,以便希望对老手和新手都有意义。

没有 Selenium 网格:

对于初学者,可以为您希望在其上运行测试的所有不同浏览器/操作系统组合使用单独的驱动程序。缺点是您必须为每个浏览器的驱动程序进行一些(尽管通常是最小的)代码调整。这也意味着打破DRY principle。要了解有关编写此类测试的更多信息,请查看this documentation。 (另请注意,如果您想通过 CI 在 Jenkins 之类的东西上在每个构建上运行这些测试,您需要让实际的浏览器在您自己的硬件上的从属设备上运行,但这些更多的是 DevOps 问题。)

使用 Selenium 网格:

更常用于您提到的目标(并在您链接到的另一篇文章中引用),Selenium Grid 是一个服务器,它允许多个测试实例在远程机器上的不同 Web 浏览器中运行。更多面向介绍的文档是here,更具前瞻性的文档是here。

在本地或云端运行: 使用 Selenium Grid,您将采用以下两种方式之一。

    在本地运行on your own hardware(或您的公司有机器可以远程进入的任何地方) 使用 online service,例如 Sauce LabsTesting Bot

在this Sauce Labs page 和测试机器人here 中显示了一个很好的“这在Java 中的样子”,用于提供在线服务提供浏览器。

Selenium 可以用多种语言编写: Selenium 遵循WebDriver API,对于 C#、Java、Perl、php、Python、Ruby、JavaScript (Node) 或其他语言,您仍然可以使用其中任何一种编写测试脚本(并且它们为其中一些提供“框架” officially,而其他人是社区驱动的)并且仍然可以在所有现代浏览器中稳定运行运行测试。

关于移动设备 关于here 有一些很好的讨论,讨论了您希望移动浏览器测试“接近真实”的程度,因为iPhoneDriver 和androidDriver 主要基于通过WebView 使用,这不太接近真实的东西。他们现在发现自己被ios-driver、Selendroid 和Appium 取代。

总结一下

所以要回答我认为你的意思,

... 可以在不同的操作系统和浏览器上运行测试并验证它们 通过使用 Selenium 提供的库

答案是您可以使用 Selenium Grid 和在线服务,或者您必须使用基本 Selenium/Selenium Server 以及许多其他库来进行测试所有现代浏览器和操作系统的组合,但我相信很多商店都会这样做,因为他们有经验和专业知识来实现​​它。


编写一次并跨浏览器测试的替代(非 Selenium)选项: 如果您有一个具有 JavaScript 经验的团队,并且您希望在没有 Selenium 开销的情况下实现跨浏览器测试的相同目标, Automates JavaScript Unit Testing with Sauce Labs (以前称为 Browser Swarm)将是一个不错的选择。

【讨论】:

好问题和好答案。只是为了确认一件事,Browser Swarm (browserswarm.com) 已经消失了,对吧?我现在看到的只是一个俄罗斯洪流讨论板。 是的,他们拥有域名,但现在位于swarm.jquery.org,所以我会更新我的答案中的链接。 嗯...不,经过进一步调查,它们(Browser Swarm 和 jQuery 的 TestSwarm)实际上是两个不同的东西。来自i-programmer.info/news/167-javascript/…,“微软与 appendTo 和 Sauce Labs 合作创建了 BrowserSwarm,这是一个开源的、基于云的 JavaScript 自动测试工具...... BrowserSwarm 非常感谢 Mozilla 的 TestSwarm,它做同样的工作但除非您自己设置服务器,否则不会对公众开放使用。另一方面,BrowserSwarm 可让您注册并使用其测试设施。” 感谢@xpt 和良好的挖掘!我本来打算指向 Sauce Labs 的解决方案,你是对的,我错误地认为它与 jQuery 交易,但它只是由 John Resig 启动的一个类似的开源项目。

以上是关于使用 WebDriver 针对不同的平台(浏览器、操作系统)?的主要内容,如果未能解决你的问题,请参考以下文章

Android手机自动化测试实例详解

Java WebDriver 使用经验

Selenium - Webdriver API /ActionChains API

如何在不同浏览器中运行Selenium WebDriver?

Webdriver如何启动不同浏览器(python)

设置 Jasmine + Webdriver - “不能在模块外使用导入”