Java Selenium 潜在的 Chrome Cookie、驱动程序、预期条件 API 问题?

问题描述

简介

我是一名使用 Java Selenium 进行 GUI 测试的学生。我无法让测试用例在我的桌面上运行,但我团队的其他成员可以。

正在使用什么技术/软件

我们使用 JDK 14、IntelliJ Community Edition、BitBucket 作为我们的存储库和 JUnit 4。

我在测试什么

我正在测试一个示例单页应用程序。我添加一个任务,使用日期选择器添加一个日期,然后单击“添加项目”按钮。但是,单击按钮未注册,任务未添加到列表中。如果我重新启动计算机,第一个 @Test 可以工作,但第二个无法清除 cookie,第二个 @Test 失败。

详细版本:

我从 Surface Book 2 到 Alienware R10 桌面。我的团队能够毫无问题地拉取项目并运行所有测试用例。然而,我无能为力。相同的程序适用于我的 SB2,但不适用于 Alienware R10(AMD 3900 处理器)。

我的尝试:

  • 我既使用了本地存储的 Chrome 驱动程序,又使用了 Boni Garcia 的 网络驱动管理器。

  • 该项目是使用 Maven 构建的,所以我尝试同时使用两者 依赖项并将 selenium 文件直接添加到我的项目中 没有成功的结构。

  • 我重新格式化了我的新 R10 并尝试重新安装所有东西。一世 小心地将 JAVA_HOME 和 MAVEN_HOME 添加到我的系统路径中。

  • 我在看到一些关于 SOF 的帖子后尝试使用 ChromeOptions,但没有 其中有一个工作。

  • 领导我们的 QA 开发人员试图帮助我大约 40 分钟,然后 想不通。他说问题不在于我的 IDE 而在于它 是使用 Chrome cookie。我必须每次都清除 cookie 时间我想运行 JUnit Selenium 测试。然而,其他成员 我的团队不必这样做,这并不总是有效。

额外细节:

  • 我获得了配备 AMD Ryzen 3900 芯片的全新 Alienware R10。我已经添加了 JAVA_HOME 和 MAVEN_HOME 到我的路径和环境变量。

  • 我可能错误添加到项目结构或依赖项中。

  • 这是我的第一篇文章,所以请告诉我是否应该格式化 更好地提出问题,或者我是否遗漏了任何重要的细节。

结论

我很担心我想在周末学习和练习,但我花了很多时间来解决这个问题。我的下一个想法是使用 Eclipse 而不是 IntelliJ,看看我是否可以让它在那里运行。这里的任何建议都会有所帮助。

编辑

Eclipse 也无法正常工作,并且存在同样的问题。这告诉我问题绝对与 IDE 无关。这可能是 cpu 或浏览器相关的问题。我还尝试通过 WebDrivermanger 依赖项使用其他驱动程序。

经过进一步研究,如果我将一些 Thread.sleep() 函数而不是 ExpectedConditions 和元素可见性添加到我的代码中,它似乎会注册点击并实际添加到任务中。 问题可能源于使用 ExpectedConditions API,但这同样适用于我的队友而不是我。这可能是 AMD 芯片组的问题吗?

元素可见性在这里使用可能是错误功能,但它确实在我的队友机器上工作,所以这就是为什么我没有尝试在那里寻找替代方案。我们正在使用的函数查看 DOM 树,而我们可能希望查看浏览器上的可见性。由于没有可使用的笔记本电脑,因此无法对此进行测试。

我重新格式化了我的旧笔记本电脑,以便在我安装了这台新电脑后可以出售它,但我会用它来尝试其他功能,看看它是否会带来不同的结果。

EDIT2:

观察/猜测

我猜测问题出在 AMD 3900 cpu 上。 Thread.sleep() 将行为更改为至少单击我的“添加项目”按钮。它仍然无法通过我通过的测试,并且 ExpectedConditions API 仍然无法正常工作。

我将退回 Alienware R10 并购买英特尔 cpu R10 或构建我自己的 PC。

只是一个有根据的猜测,基于我和我的队友的机器之间的行为差​​异,他们知道我有 AMD。

如果您遇到类似问题,请确认您在此线程中使用的是 AMD 还是 Intel。它也会帮助其他人。我确定有变通方法,但它们对我不起作用。我还尝试使用 ChromeOptions 禁用 GPU 和其他一些选项。

但是没有成功,除非有更好的答案,否则我将其归咎于 AMD 3900 cpu

谢谢,如果您遇到类似问题或找到更好的答案,请参与此主题。任何推测也可能有所帮助。

解决方法

我同意你们团队的质量检查。 这与 IDE 无关。我怀疑操纵 DesiredCapabilitiesWebDriver 会解决这个问题。鉴于您使用的是 bonigarcia WebDriverManager dependency,我建议您至少尝试以下代码以查看是否可以正确创建 WebDriver

public static void main(String[] args) {
    WebDriverManager.chromedriver().setup();
    DesiredCapabilities chromeDesiredCapabilities = DesiredCapabilities.chrome();
    WebDriver webdriver = new ChromeDriver(chromeDesiredCapabilities)
}