尝试与 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 步骤