【问题标题】:Safari automation through Jenkins通过 Jenkins 实现 Safari 自动化
【发布时间】:2018-05-11 10:11:16
【问题描述】:

我正在尝试在 safari 上运行我的 selenium 自动化测试,但我遇到了通过 Jenkins 运行的问题。

我有一个在 vm 上运行的 osX env 并在本地运行测试,一切正常。当我尝试通过 Jenkins 运行这些测试时,我遇到了问题。他们运行,但无法打开 safari。

我对 mac 不是很熟悉,所以真的不知道是什么导致了这个问题。 vm 是 jenkins 的奴隶,那里一切正常。

感谢您的帮助。

我看到的错误如下

 System info: host: 'Test-MacBook-Pro.local', ip: 
'fe80:0:0:0:1c75:5215:5f4d:cef2%en0', os.name: 'Mac OS X', os.arch: 
'x86_64', os.version: '10.13.4', java.version: '1.8.0_171'
 Driver info: driver.version: SafariDriver
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:91)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137)
at org.openqa.selenium.safari.SafariDriver.<init>(SafariDriver.java:60)
at org.openqa.selenium.safari.SafariDriver.<init>(SafariDriver.java:40)
at extra.StartupTestCase.cleanUpLogin(StartupTestCase.java:292)
at extra.StartupTestCase.beforeSuite(StartupTestCase.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:523)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:224)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:146)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:326)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.TestNG.privateMain(TestNG.java:1442)
at org.testng.TestNG.main(TestNG.java:1411)
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:16788 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused (Connection refused)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:159)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:139)
at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:87)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:343)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:159)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
... 26 more
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
... 41 more

【问题讨论】:

  • 您能否使用从顶部修剪的错误堆栈跟踪以及您的代码试验来更新问题?那些会很有用的。
  • 感谢您的回复。该代码是一个成熟的基于 java 的自动化框架,它位于以下行 'driver = new SafariDriver():' 我没有在代码中指定 safari 驱动程序,因为不需要阅读它

标签: selenium jenkins safari automation


【解决方案1】:

查看错误日志,您似乎没有为 Selenium 设置 Safari 驱动程序。 找出 Selenium 的最新 safari 驱动程序并在您的代码中设置它的路径。

从 Jenkins 运行 selenium 代码:​​

我建议您使用 jenkins 节点并在节点上触发您的 java 代码。 你也可以使用 Gradle/Maven/TestNG 作为触发器和构建。

【讨论】:

  • 感谢您的评论。根据我的阅读,使用 Safari 10 不需要在代码中设置 webdriver。我确实设置了这个,看看它是否有帮助,我仍然得到同样的错误测试在本地运行良好,它从詹金斯运行是问题。 .使用 testng 运行测试
【解决方案2】:

我曾多次遇到同样的错误。您连接到詹金斯的方式似乎有问题。当你在 jenkins 中定义一个节点时,会有 Launch method 选项。根据您使用的启动方法,行为会发生一些变化。

  • 可能您正在使用 通过 SSH 启动代理,它允许您将特定机器与特定节点永久连接。但是,此方法在后台运行进程。出于某种原因,Safari 不适用于后台进程。
  • 另一种方法是通过 Java Web Start 启动代理。使用此选项,每次重新启动计算机时,都必须通过 Java 小程序手动将其连接到 jenkins 节点。但是,使用这种方法,进程会在前面启动,让您从 jenkins 启动 safari。

我还没有找到通过 SSH 连接并正确启动 safari 的方法,也没有看到任何其他解决方案。

希望这是你的问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-08
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2019-05-29
    • 2016-10-06
    相关资源
    最近更新 更多