为什么Selenium测试在不同的机器上表现不同?

时间:2017-09-29 16:38:32

标签: powershell selenium amazon-ec2 nunit nunit-console

我无法在Google上找到有关此主题的更多信息。下面,我提供了来自相同Selenium测试的三个结果。为什么从不同的地方运行测试时会得到不同的结果?

信息:

所以我们的架构:Bitbucket,Bamboo Stage 1(构建,部署到QA),Bamboo Stage 2(启动Amazon EC2实例"测试",从针对最近部署的QA运行测试)

  • 使用Chrome Webdriver。
  • 对于所有三种变体,我使用的是部署了我们的应用程序的相同QA URL。
  • 我正在运行所有测试并行化每个夹具
  • EC2实例在安装了Chrome浏览器的情况下正在运行Windows Server 2012 R2
  • 我已确保测试解决方案已正确部署到EC2"测试"实例。它确实是完全相同的解决方案并且构建正确。

首先,本地:

Local Test Run

其次,来自EC2 Via SSM Script调用测试: 请注意,PowerShell脚本调用nunit3-console.exe就像在我的第三个示例中使用命令行一样。

On EC2 via SSM

最后,在EC2上RDP并从命令行运行测试:

RDP on EC2 and run tests from command line

这令我感到困惑...... Selenium在不同机器上运行的原因有何不同?

2 个答案:

答案 0 :(得分:1)

这真的应该是一个评论,但我还不能发表评论...... 我对你正在测试的应用程序肯定不够了解,但这似乎是我见过测试我正在研究的应用程序的东西。

我见过两个问题。首先,Selenium在创建之前检查元素。有时它可以工作,有时它会失败,它只取决于测试运行时页面的加载速度。它没有任何押韵或理由。其次,我正在测试的应用程序非常愚蠢。当您触摸某个字段时,输入数据并转到下一个字段,它会有效地将所有可编辑字段发布回数据库并刷新所有字段。因此,Selenium输入值,移动到下一个字段并弹出陈旧元素错误或找不到元素错误,具体取决于它在post / refresh循环中尝试与元素交互的时间。

我找到的解决方案是中等丑陋,我尝试了等待,但因为它是相同的元素名称,它已经可见并且立即被抓取并返回陈旧元素。因此,我发现的唯一一件事就是通过在调用之间使用显式等待,我可以让它一致地正确运行。下面是我正在测试的应用程序的一个示例。 (我知道我可以压缩代码,我在公司的样式手册中工作)

Thread.Sleep(2000);
By nBaseLocator = By.XPath("//*[@id='attr_seq_1240']");
IWebElement baseRate = driver.FindElement(nBaseLocator);
baseRate.SendKeys(Keys.Home + xBaseRate + Keys.Tab);

如果这没有帮助,请告诉我们有关该应用及其运作方式的更多信息,以便我们帮助您找到解决方案。

答案 1 :(得分:0)

@Florent B.谢谢!

编辑:最终无法正常工作...... 使用PowerShell脚本远程调用时,测试仍然运行不同。 但是,测试在ec2实例和我的机器上正确运行。

因此无头命令开关允许我在本地复制我的失败测试。

接下来我发现在测试期间使用无头镀铬浏览器在EC2实例上通过脚本运行时...这是自动的,所以测试确实在哪里运行,错误在哪里有效。

最后,我发现屏幕尺寸确实是罪魁祸首,因为它的尺寸为600/400(600/400?)

因此,经过多次尝试,Windows,C#和ChromeDriver 2.32唯一可用的屏幕尺寸选项是在启动驱动程序时设置webDriver选项:

ChromeOptions chromeOpt = new ChromeOptions();
chromeOpt.AddArguments("--headless");
chromeOpt.AddArgument("--window-size=1920,1080");
chromeOpt.AddArguments("--disable-gpu");
webDriver = new ChromeDriver(chromeOpt);

完成编辑: 只是为了更新 屏幕尺寸足够大。

Screen sizes at beginning and end of test

仍在尝试解决问题。其他人遇到过这个? AWS SSM命令 - > Powershell - >使用Start-Process运行Selenium测试 - >任何需要元素的测试都会失败,因为ElementNotFound或ElementNotVisible异常。 使用POM进行测试。 c#中的FindsBy过滤器找不到元素。

在EC2上本地运行测试可以从cmd,powershell和Powershell ISE运行。

使用AWS SSM Command执行测试时无法正常运行。找不到任何资源来解决问题。