我无法在Google上找到有关此主题的更多信息。下面,我提供了来自相同Selenium测试的三个结果。为什么从不同的地方运行测试时会得到不同的结果?
信息:
所以我们的架构:Bitbucket,Bamboo Stage 1(构建,部署到QA),Bamboo Stage 2(启动Amazon EC2实例"测试",从针对最近部署的QA运行测试)
首先,本地:
其次,来自EC2 Via SSM Script调用测试: 请注意,PowerShell脚本调用nunit3-console.exe就像在我的第三个示例中使用命令行一样。
最后,在EC2上RDP并从命令行运行测试:
这令我感到困惑...... Selenium在不同机器上运行的原因有何不同?
答案 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);
完成编辑: 只是为了更新 屏幕尺寸足够大。
仍在尝试解决问题。其他人遇到过这个? AWS SSM命令 - > Powershell - >使用Start-Process运行Selenium测试 - >任何需要元素的测试都会失败,因为ElementNotFound或ElementNotVisible异常。 使用POM进行测试。 c#中的FindsBy过滤器找不到元素。
在EC2上本地运行测试可以从cmd,powershell和Powershell ISE运行。
使用AWS SSM Command执行测试时无法正常运行。找不到任何资源来解决问题。