Intern真的能在任何Selenium服务上运行吗
Is the Intern really able to run on any Selenium service?
我为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提供程序运行相同的测试套件,并使其成功执行,但您必须做一些事情:
-
您需要确保正确配置了提供程序,以便它们都运行相同版本的Selenium。这方面没有标准;每个提供程序使用不同的密钥来决定运行哪个Selenium版本。请查看每个提供商的文档以获取要使用的正确密钥。
-
您需要编写没有竞赛条件的测试。你在这里描述的听起来像是一个经典的竞争条件,你正在执行一些异步完成的操作,因此只有在特定时间段内执行操作的环境中才会发生。修改这个特定的测试,使它有一个查找超时,然后尝试
find
——当返回键被点击时,你期望生成的元素——应该是一个很好的解决方案,因为这将允许你等待必要的时间,而不会使测试变慢。
不幸的是,即使有了这个建议,所有用于Web浏览器测试的云托管提供商都是垃圾,并且以一种随机导致测试中断的方式混乱不堪。BrowserStack是迄今为止最好的避免这种情况的方法,但即使是它们也会不时地破坏测试,这些测试在本地托管的Selenium安装中运行得非常好。
对于文件上传,如果检测到远程提供商支持,并且您为运行intern-runner
的服务器上的文件type
提供了有效路径,则Intern将自动上传文件。您可以通过查看this.remote.session.capabilities.remoteFiles
来检查服务器是否支持上传。必须打开功能检测才能正常工作,如果您试图将文件上传到与intern-runner
位于同一台计算机上的Selenium服务器,则应运行Internet3.0.6或更新版本。
- 无法在Ionic服务中运行角度spotify方法
- 如何将用户从jquery移动窗体键入的查询SQL发布到WCF服务,并在WCF服务上运行该查询
- Angularjs,在运行时设置价值服务的值
- Angular 提供程序服务需要 init 函数运行一次
- AJAX 可访问的长时间运行的服务任务阻止在启用 ASP.NET 兼容性/会话的环境中的后续 AJAX 服务请求
- 如何安全地将字符串从 Web 视图活动传递到 Android 中正在运行的服务
- 如何在 SailsJS 中的特定时间运行服务
- 检查自承载服务是否正在运行
- 如何编写 nodejs 服务,一直运行
- 如何在NW.js中的服务页面中运行脚本
- 运行方法中的Angular$q服务实现
- 联机运行web服务时出错
- Angular JS-需要与页面上的所有指令进行通信,这些指令来自只运行一次的服务中的代码
- 推迟在应用程序运行angularjs上创建控制器/服务
- 使用Javascript访问本地主机上运行的服务
- 如何在Phonegap应用程序中创建一个简单的服务,以便在后台运行setInterval()
- Angular.js-先运行服务函数,然后再运行其他函数
- 在第一次服务完成后运行Angular服务
- 将控制器或服务作为变量运行
- Node.js脚本应该在服务运行之前等待