实习生真的能够 运行 使用任何 Selenium 服务吗?
Is the Intern really able to run on any Selenium service?
我已经为 the Intern 编写了一些功能测试,据说应该可以在 SauceLabs、BrowserStack、TestingBot、 或 我自己的 Selenium 网格上运行。
虽然相同的代码似乎并不适用于所有服务。我最初在 SauceLabs 上进行了功能测试,所以我正在使用该服务作为我的 "base",可以这么说。
在 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]
.
另一个例子是,当我在 link 上 .click()
时,它不会总是等待下一页加载,即使之后有 .sleep()
命令。
关于 TestingBot,应用程序完全无法上传文件,我终究无法弄清楚如何启用所需的 file_watcher
服务。他们有一个 file upload example here,但我不知道如何配置实习生来为我做这件事。
难道实习生不应该为测试处理云提供商的这些差异吗?
是否有一些标准化的方式在实习生中编写我的测试,以便我可以在不更改测试本身的情况下更改我的云测试提供商?
应该可以针对任何云托管的 Selenium 提供程序 运行 相同的测试套件并让它们成功执行,但您必须做一些事情:
您需要确保已正确配置提供程序,以便它们都运行使用相同版本的 Selenium。这没有标准;每个提供者使用不同的密钥来决定要使用哪个 Selenium 版本 运行。查看每个提供商的文档以了解要使用的正确密钥。
您需要编写没有竞争条件的测试。您在这里描述的内容听起来像是一个经典的竞争条件,您正在执行一些异步完成的操作,因此只发生在特定时间段内执行操作的环境中。修改此特定测试使其具有 find timeout 然后尝试 find
您希望在按下 return 键时生成的元素应该是一个很好的解决方案,因为这将使您在不减慢测试速度的情况下等待必要的时间。
不幸的是,即使有这个建议,所有用于 Web 浏览器测试的云托管提供商都是垃圾,并且以一种随机导致测试中断的方式乱七八糟。 BrowserStack 是迄今为止最好的避免这种情况的方法,但即使他们不时做一些事情来破坏测试,这些测试在本地托管的 Selenium 安装中运行得非常好。
对于文件上传,如果 Intern 检测到远程提供商支持文件上传,并且您 type
服务器上文件的有效路径 intern-runner
是 运行宁。您可以通过查看 this.remote.session.capabilities.remoteFiles
来检查服务器是否支持上传。必须打开功能检测才能使其工作,如果您尝试将文件上传到与 intern-runner
.[=16 同一台机器上的 Selenium 服务器,您应该 运行 Intern 3.0.6 或更新版本=]
我已经为 the Intern 编写了一些功能测试,据说应该可以在 SauceLabs、BrowserStack、TestingBot、 或 我自己的 Selenium 网格上运行。
虽然相同的代码似乎并不适用于所有服务。我最初在 SauceLabs 上进行了功能测试,所以我正在使用该服务作为我的 "base",可以这么说。
在 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]
.
另一个例子是,当我在 link 上 .click()
时,它不会总是等待下一页加载,即使之后有 .sleep()
命令。
关于 TestingBot,应用程序完全无法上传文件,我终究无法弄清楚如何启用所需的 file_watcher
服务。他们有一个 file upload example here,但我不知道如何配置实习生来为我做这件事。
难道实习生不应该为测试处理云提供商的这些差异吗?
是否有一些标准化的方式在实习生中编写我的测试,以便我可以在不更改测试本身的情况下更改我的云测试提供商?
应该可以针对任何云托管的 Selenium 提供程序 运行 相同的测试套件并让它们成功执行,但您必须做一些事情:
您需要确保已正确配置提供程序,以便它们都运行使用相同版本的 Selenium。这没有标准;每个提供者使用不同的密钥来决定要使用哪个 Selenium 版本 运行。查看每个提供商的文档以了解要使用的正确密钥。
您需要编写没有竞争条件的测试。您在这里描述的内容听起来像是一个经典的竞争条件,您正在执行一些异步完成的操作,因此只发生在特定时间段内执行操作的环境中。修改此特定测试使其具有 find timeout 然后尝试
find
您希望在按下 return 键时生成的元素应该是一个很好的解决方案,因为这将使您在不减慢测试速度的情况下等待必要的时间。
不幸的是,即使有这个建议,所有用于 Web 浏览器测试的云托管提供商都是垃圾,并且以一种随机导致测试中断的方式乱七八糟。 BrowserStack 是迄今为止最好的避免这种情况的方法,但即使他们不时做一些事情来破坏测试,这些测试在本地托管的 Selenium 安装中运行得非常好。
对于文件上传,如果 Intern 检测到远程提供商支持文件上传,并且您 type
服务器上文件的有效路径 intern-runner
是 运行宁。您可以通过查看 this.remote.session.capabilities.remoteFiles
来检查服务器是否支持上传。必须打开功能检测才能使其工作,如果您尝试将文件上传到与 intern-runner
.[=16 同一台机器上的 Selenium 服务器,您应该 运行 Intern 3.0.6 或更新版本=]