我是使用WebDriver进行自动化测试的新手,所以我有几个问题只是想清除一下我的脑海。在几页上,我仅通过针对浏览器或OS的功能定位了这些示例,就看到了在不同平台上执行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提供的库来运行测试并在不同的OS和浏览器上进行验证吗?
如果是这样,这些测试对于典型的跨浏览器/平台html/JavaScript问题的准确性如何?
谢谢
最佳答案
这是一个很好的问题。我将尝试将其分解为较小的信息包,以使其对老专家和新手都有意义。
不含 Selenium 网格的:
对于初学者,可以对要运行测试的所有不同浏览器/OS组合使用单独的驱动程序。缺点是您必须对每个浏览器的驱动程序进行一些(尽管通常是最少的)代码调整。这也意味着破坏DRY principle。要了解有关编写这类测试的更多信息,请查看this documentation。 (还请注意,如果您想通过CI在类似于Jenkins之类的每个构建上运行这些测试,则需要使实际的浏览器在您自己的硬件上的从属服务器上运行,但这是对DevOps的关注。
使用Selenium Grid:
Selenium Grid更常用于您提到的目标(并在您链接到的另一篇文章中进行了引用),它是一台服务器,它允许多个测试实例在远程计算机上的不同Web浏览器中运行。更具介绍性的文档为here,更具前瞻性的文档为here。
在本地或云中运行:
使用Selenium Grid,您将采用以下两种方法之一。
在this Sauce Labs page和测试Bot here中展示了一个不错的“在Java中看起来像什么”,用于提供在线服务以提供浏览器。
Selenium 可以用一种语言编写:
Selenium遵循WebDriver API,对于C#,Java,Perl,PHP,Python,Ruby,JavaScript(节点)或其他语言,您仍然可以使用其中任何一种编写测试脚本(它们为其中的某些officially提供了“框架”,而其他的则是由社区驱动的),并且运行测试仍然可以在所有现代浏览器中可靠地运行。
关于移动设备
关于here,有一些很好的讨论,讨论了您希望移动浏览器测试的“真实程度”如何,因为iPhoneDriver和AndroidDriver很大程度上基于WebView的使用,与真实情况不太接近。他们现在发现自己已被ios-driver,Selendroid和Appium取代。
总结
因此,要回答我认为与您相处的问题,
答案是,您可以使用Selenium Grid和在线服务,或者必须使用基本的Selenium/Selenium Server 以及许多其他库来测试所有现代浏览器和操作系统组合,但是我敢肯定有很多商店之所以这样做,是因为他们拥有丰富的经验和专业知识来实现这一目标。
仅写一次并在浏览器中进行测试的备用(非 Selenium )选项:
如果您有一个具有JavaScript经验的团队,并且希望在没有Selenium开销的情况下实现跨浏览器测试的相同目标,那么 Automates JavaScript Unit Testingwith Sauce Labs (以前称为Browser Swarm)将是一个不错的选择。