使用selenium,Nunit,Selenium Grid,C#,webdriver/remote control进行自动浏览器测试

lbr*_*own 5 c# selenium automated-tests webdriver selenium-grid

我一直在研究如何使用各种不同的方法自动化浏览器测试数周.Seleniums网站非常模糊,这是最好的选择.

我安装了

  1. Selenium Webdriver
  2. 遥控
  3. Selenium Grid
  4. Apache Ant
  5. Nunit(以及你可能需要做的其他一切)

我终于放弃了自己的尝试,并想知道最好的方法.

我希望能够

  1. 在许多不同的浏览器上加载相同的网页
  2. 在许多虚拟机(我已设置)上加载相同的网页
  3. 能够拍摄比较不同浏览器结果的快照.

我对使用C#进行编程有所了解,并希望通过Nunit运行我的测试.

任何人都可以给我指示或指向我已经拥有它们的网站吗?谢谢.

And*_*ect 8

我已经使用junit和Selenium WebDriver构建了一个测试框架,它满足了你的每一个要点.虽然它不完全是你所要求的,但我觉得无论如何它对你都有好处.

在许多不同的浏览器上加载相同的网页

使用Selenium的网格,设置非常简单.设置一些虚拟机,其中包含您要测试的环境.例如,在我们的环境中,我们有一个运行四个节点(作为虚拟机)的网格,其设置如下所示

  • Windows与IE7和FireFox
  • Windows与IE8和FireFox
  • Windows与IE9和Firefox
  • Linux与FireFox

请注意,Selenium建议只允许在Windows节点上运行一个IE实例.在每个上述节点上,存在指定IE的一个实例,并且允许在任何给定时间运行指定FF的五个实例.通过网格设置和集线器配置,启动测试是轻而易举的.在WebDriver中,使用该DesiredCapabilities对象设置所需的环境,然后关闭测试并等待结果返回.

Platform desiredPlatform;
DesiredCapabilities desiredCapabilities;
desiredPlatform = Platform.LINUX;
desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setPlatform(desiredPlatform);
desiredCapabilities.setVersion("11");

WebDriver driver = new RemoteWebDriver("http://hubURL", desiredCapabilities);
Run Code Online (Sandbox Code Playgroud)

在许多虚拟机(我已设置)上加载相同的网页

我通过强制测试以线程方式运行,尽管是以非常规的方式运行,解决了这个问题.每个JUnit测试都使用我放在一起的共享线程库,它创建了在不同线程中所需的所有必需的RemoteWebDrivers.这些线程中的每一个在其节点上同时运行,而父线程处于等待并终止所有线程.然后进入下一个运行多线程的测试.

我遇到了一些问题,例如在所有子线程中检索Junit堆栈跟踪.我通过重定向Std.err到父线程上的字节流来解决这个问题.所有错误都被路由到该流,然后我将其转换为字符串并Std.out在每次测试结束时打印出来.在测试结束时生成的html页面包括Std.out完美的结果.

能够拍摄比较不同浏览器结果的快照

虽然我已经开始使用它,但是远程抓取屏幕截图存在一些固有的问题.如果进程作为服务运行,IE将返回黑屏幕截图.解决方法是从命令行运行jar并保持用户登录,在这种情况下屏幕截图正确返回.这是浏览器中的一个已知问题,并且确实没有很好的解决方案.截图大致类似于此

WebDriver augmentedDriver = new Augmenter().augment(driver);
TakesScreenshot ss = (TakesScreenshot) augmentedDriver;
String base64Screenshot = ss.getScreenshotAs(OutputType.BASE64);
byte[] decodedScreenshot = Base64.decodeBase64(base64Screenshot.getBytes());
FileOutputStream fos = new FileOutputStream(new File(imageName));
fos.write(decodedScreenshot);
fos.close();
Run Code Online (Sandbox Code Playgroud)

它将捕获的屏幕截图从远程计算机的运行浏览器保存到本地计算机上.

实际上,浏览器自动化仍在努力稳定自身.有许多重要的功能,例如您所询问的功能,我在任何框架中都没有牢固地实现这些功能.但是,随着时间的推移,我相信很多这样的事情会得到解决,各地的QA开发人员都会欢欣鼓舞.