Intern真的能在任何Selenium服务上运行吗

Is the Intern really able to run on any Selenium service?

本文关键字:服务 运行 Selenium 任何 真的 Intern      更新时间:2023-09-26

我为Intern编写了一些功能测试,这些测试应该在SauceLabs、BrowserStack、TestingBot、我自己的Selenium网格上运行。

不过,相同的代码似乎并不适用于所有服务。我最初在SauceLabs上进行功能测试,所以可以说,我将该服务作为我的"基础"。

在BrowserStack上,测试似乎失败了,因为命令执行得太快。例如,我使用的是.pressKeys('TEST'nIN'nPROGRESS'n'),其中'n应该在页面上执行javascript,将前面的文本转换为标签(就像这个问题的SO标签一样:[intern] [javascript] [testing])。

该命令应产生以下结果:

[TEST] [IN] [PROGRESS]

而是导致

[TESTIN] [PROGRESS]

导致我的断言失败。将pressKeys命令更改为

.pressKeys('TEST'n')
.sleep(500)
.pressKeys('IN'n')
.sleep(500)
.pressKeys('PROGRESS'n')

没有解决问题。测试会不一致地通过/失败,标签有时显示为[TEST] [IN] [PROGRESS],有时显示为[TESTIN] [PROGRESS]

另一个例子是,当我在链接上.click()时,它不会总是等待加载下一个页面,即使之后使用.sleep()命令也是如此。

关于TestingBot,应用程序无法上传文件,我一辈子都不知道如何启用所需的file_watcher服务。他们在这里有一个文件上传示例,但我不知道如何配置Internet为我做这件事。

难道实习生不应该为测试处理云提供商的这些差异吗?

是否有一些标准化的方法在Intern中编写测试,这样我就可以在不更改测试本身的情况下更改云测试提供商?

应该可以对任何云托管的Selenium提供程序运行相同的测试套件,并使其成功执行,但您必须做一些事情:

  1. 您需要确保正确配置了提供程序,以便它们都运行相同版本的Selenium。这方面没有标准;每个提供程序使用不同的密钥来决定运行哪个Selenium版本。请查看每个提供商的文档以获取要使用的正确密钥。

  2. 您需要编写没有竞赛条件的测试。你在这里描述的听起来像是一个经典的竞争条件,你正在执行一些异步完成的操作,因此只有在特定时间段内执行操作的环境中才会发生。修改这个特定的测试,使它有一个查找超时,然后尝试find——当返回键被点击时,你期望生成的元素——应该是一个很好的解决方案,因为这将允许你等待必要的时间,而不会使测试变慢。

不幸的是,即使有了这个建议,所有用于Web浏览器测试的云托管提供商都是垃圾,并且以一种随机导致测试中断的方式混乱不堪。BrowserStack是迄今为止最好的避免这种情况的方法,但即使是它们也会不时地破坏测试,这些测试在本地托管的Selenium安装中运行得非常好。

对于文件上传,如果检测到远程提供商支持,并且您为运行intern-runner的服务器上的文件type提供了有效路径,则Intern将自动上传文件。您可以通过查看this.remote.session.capabilities.remoteFiles来检查服务器是否支持上传。必须打开功能检测才能正常工作,如果您试图将文件上传到与intern-runner位于同一台计算机上的Selenium服务器,则应运行Internet3.0.6或更新版本。