尝试与 Bamboo 一起运行时,Selenium 测试挂起

Posted

技术标签:

【中文标题】尝试与 Bamboo 一起运行时,Selenium 测试挂起【英文标题】:Selenium Tests hang when attempting to be run with Bamboo 【发布时间】:2016-09-20 19:30:59 【问题描述】:

我正在尝试使用 Bamboo 的构建和部署功能在我的项目中运行 Selenium 自动化测试。

我们目前正在使用 Maven 任务来构建和运行常规 JUNIT 测试,并且计划在代码成功部署到服务器后使用另一个 Maven 任务来运行 Selenium 测试。目前,一切似乎在本地运行得很好,但是当竹子尝试运行 Selenium 测试时,它似乎无限期地挂起。不幸的是,我无法远程访问服务器以直接观看,但我知道它是运行操作系统版本的 Microsoft 服务器:Windows 2012 R2 64 位。我也知道服务器正在使用 java 版本“1.8.0_101”,这与我的本地设置相同。我在下面包含了我正在运行的代码示例。

import java.util.concurrent.TimeUnit;

import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

public class SeleniumTestExample 
WebDriver driver;
@Before
public void setup()
    System.setProperty("webdriver.ie.driver", "src/test/resources/IEDriverServer32bit.exe");
    DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
    ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
    driver = new InternetExplorerDriver(null, ieCapabilities);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("https://google.com");


@Test
public void printPageTitle()
    System.out.println("Title of Page is: " + driver.getTitle());
    driver.quit();

通过 Bamboo 运行时,日志中唯一的输出是行...

已启动 InternetExplorerDriver 服务器(32 位)

2.53.1.0

监听 8080 端口

只允许本地连接

【问题讨论】:

你想在哪里运行你的测试,在 CI (bamboo) 服务器上? 是的,我正在尝试在竹服务器上运行这些测试,但您能否详细说明您的问题? 【参考方案1】:

应该使用 CI 或 Bamboo 服务器来控制您的测试。您不应该尝试在 CI 服务器上运行测试。您遇到的问题可能是因为这个。您正在尝试将 CI 服务器用作本地计算机,它的响应方式与您的本地计算机不同。相反,您应该在设置中使用selenium grid,通过使用集线器和节点远程连接到机器。您可能还必须使用remote webdriver。也可以看看this 的帖子

【讨论】:

【参考方案2】:

我使用 TeamCity 看到过这种情况,在这种情况下,IE 会告诉您其可执行文件将只接受来自本地计算机的连接。根据Selenium org

由 IEDriverServer.exe 启动的 HTTP 服务器将访问控制列表设置为仅接受来自本地计算机的连接,并禁止来自远程计算机的传入连接。目前,如果不修改IEDriverServer.exe的源代码,则无法更改。要在远程计算机上运行 Internet Explorer 驱动程序,请将 Java 独立远程服务器与您的语言绑定的 RemoteWebDriver 等效项结合使用。

所以首先通过像这样的参数来运行 chromedriver:

chromedriver --whitelisted-ips=""

这基本上会将所有 IP 列入白名单,当然并不总是理想的解决方案。但是会告诉你你的测试可以在这个 CI 配置上运行。接下来要寻找的是您的用户权限。要求您的管理员授予您更多权限以完成您的工作。请记住,IE 的保护模式可能需要您的用户进行一些额外的更改。如果这些都没有帮助,请考虑使用 IE 节点的Selenium grid。

【讨论】:

【参考方案3】:

尝试去掉代码中的那一行:

System.setProperty("webdriver.ie.driver", "src/test/resources/IEDriverServer32bit.exe");

首先,它告诉 selenium 应该在哪里寻找 IE 的 webdriver。由于Bamboo服务器是windows机器,所以需要设置文件的绝对路径,比如“C:\test\webdriver\IEDriverServer32bit.exe”。

其次,可以使用 Bamboo 任务的环境变量设置属性。

第三,如果要动态定义,可以在 pom.xml 中定义属性为:

<webdriver.ie.driver.path> C:\test\webdriver\IEDriverServer32bit.exe </webdriver.ie.driver.path>

并在 maven-surefire-plugin 的帮助下在系统属性中使用它。

然后你可以使用命令运行测试

mvn test -Dwebdriver.ie.driver.path=C:\test\webdriver\IEDriverServer32bit.exe

随心所欲。

【讨论】:

以上是关于尝试与 Bamboo 一起运行时,Selenium 测试挂起的主要内容,如果未能解决你的问题,请参考以下文章

在 Bamboo CI 上运行单个 Python Selenium 测试

[将Winium(+ Selenium)与python一起使用只允许我打开该应用程序,但不会与之交互?

Java Selenium CI 构建运行速度比本地快得多?

Bamboo 到多个 EC2 实例的 Selenium Grid 步骤

如何在 Jenkins 中触发构建在其他构建成功但在 Bamboo 中运行之后

BitBucket 云版本的源代码仓库是不是与 Bamboo for CI/CD 一起使用?