在Windows 7上的jenkins中执行selenium(testng)测试时找不到Chrome二进制文件

时间:2016-12-14 14:22:41

标签: selenium jenkins testng

我有selenium和testng的基本登录测试。从eclipse执行时,它按预期工作并调用Google Chrome。如果从TESTNG命令行执行,它也可以正常工作。

这是我的@Before:

@BeforeMethod
public void setUp() throws Exception { 
 File file = new File("C:/Selenium-driver/chromedriver.exe"); 
 System.setProperty("webdriver.chrome.driver", file.getAbsolutePath()); 
 driver = new ChromeDriver(); 
 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
 }

然而,如果我通过Jenkins执行相同的测试,它会说:

Building in workspace C:\EclipsePortable\Data\workspace\GS_TESTNG 
[G_TESTNG] $ cmd /c call C:\Windows\TEMP\hudson9049518275115936054.bat 

C:\EclipsePortable\Data\workspace\G_TESTNG>_test_login_cmd.bat 

C:\EclipsePortable\Data\workspace\G_TESTNG>cd C:\EclipsePortable\Data\workspace\G_TESTNG 

C:\EclipsePortable\Data\workspace\G_TESTNG>java -cp C:\EclipsePortable\Data\workspace\G_TESTNG\lib\*;C:\EclipsePortable\Data\workspace\G_TESTNG\bin org.testng.TestNG testng.xml 
... 
... TestNG 6.9.9 by Cédric Beust (cedric@beust.com) 
... 

[TestNG] Running: 
  C:\EclipsePortable\Data\workspace\G_TESTNG\testng.xml 

Starting ChromeDriver 2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30) on port 36257 
Only local connections are allowed. 
FAILED CONFIGURATION: @BeforeMethod setUp 
org.openqa.selenium.WebDriverException: unknown error: cannot find Chrome binary 
  (Driver info: chromedriver=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 664 milliseconds 
Build info: version: '2.51.0', revision: '1af067d', time: '2016-02-05 19:15:17' 
System info: host: 'NMTLA12810', ip: '192.168.0.179', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_102' 
Driver info: org.openqa.selenium.chrome.ChromeDriver 
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
        at java.lang.reflect.Constructor.newInstance(Unknown Source) 
        at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) 
        at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) 
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678) 
        at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:249) 
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131) 
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:144) 
        at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:170) 
        at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:159) 
        at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:116) 
        at com.test.TestA.setUp(TestA.java:33) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
        at java.lang.reflect.Method.invoke(Unknown Source) 
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) 
        at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:510) 
        at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:211) 
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:585) 
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816) 
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124) 
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) 
        at org.testng.TestRunner.privateRun(TestRunner.java:774) 
        at org.testng.TestRunner.run(TestRunner.java:624) 
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:359) 
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354) 
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312) 
        at org.testng.SuiteRunner.run(SuiteRunner.java:261) 
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215) 
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1140) 
        at org.testng.TestNG.run(TestNG.java:1048) 
        at org.testng.TestNG.privateMain(TestNG.java:1355) 
        at org.testng.TestNG.main(TestNG.java:1324) 

SKIPPED CONFIGURATION: @AfterClass tearDown 
SKIPPED: testGooglePageTitleInChrome 

=============================================== 
    TestNG Test Group 
    Tests run: 1, Failures: 0, Skips: 1 
    Configuration Failures: 1, Skips: 1 
=============================================== 


=============================================== 
Main Test Suite 
Total tests run: 1, Failures: 0, Skips: 1 
Configuration Failures: 1, Skips: 1 
=============================================== 

[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@7fbe847c: 16 ms 
[TestNG] Time taken by org.testng.reporters.jq.Main@759ebb3d: 78 ms 
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@ba8a1dc: 59 ms 
[TestNG] Time taken by org.testng.reporters.XMLReporter@1c655221: 5 ms 
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@1edf1c96: 16 ms 
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms 
Build step 'Exécuter une ligne de commande batch Windows' marked build as failure 
Finished: FAILURE

14 个答案:

答案 0 :(得分:5)

您的AppData上可能安装了chrome(特别是如果您使用的是Windows 7)。我猜Jenkins无法从您的用户目录访问二进制文件。确保Jenkins可以访问Chrome上的目录,或者尝试将chrome重新安装到程序文件目录中。

另一方面,您可以简单地指示Chromedriver在哪里寻找Chrome二进制文件,

Select * from table1 where col1 = 'val1' and col2 = 'val2'; 

答案 1 :(得分:1)

我只是检查我的chrome版本(chrome:// settings / help(85.0.4183.83)),然后相应地下载了chromedriver.exe(https://chromedriver.chromium.org/downloads),并指定了新的chrome driver.exe路径...-这解决了我同样的问题

答案 2 :(得分:0)

我遇到了同样的问题,我可以通过本地执行Selenium脚本,但是当尝试在Jenkins上执行时出现错误“未知错误:找不到Chrome二进制文件”。

这是我在Jenkins服务器上工作的解决方案: 1.在jenkins上启动硒脚本之前,下载并启用Xvfb。欲了解更多信息,请点击此处https://wiki.jenkins.io/display/JENKINS/Xvfb+Plugin 2.我在本地和jenkins服务器上有ubuntu 16.xx操作系统。 3.尝试仅将chromedriver保留在“ usr / bin”文件夹中,否则可能会出错。

try {

            if(service == null){
                service = new ChromeDriverService.Builder()
                        .usingDriverExecutable(new File("/usr/bin/chromedriver"))// set the chromedriver path
                       .usingAnyFreePort()
                        .withEnvironment(ImmutableMap.of("DISPLAY", ":15"))
                        .withSilent(true)
                        .build();
                service.start();
            }

            System.out.println("Reading chrome driver");
            System.setProperty("webdriver.chrome.driver","/usr/bin/chromedriver");
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.addArguments("--headless");
            WebDriver driver = new ChromeDriver(chromeOptions);
            driver.get("https://google.com");
            driver.quit();
 }
        catch(Exception ex){
        System.out.println(ex.getMessage());
        }

答案 3 :(得分:0)

问题是代码中的以下几行:

File file = new File("C:/Selenium-driver/chromedriver.exe"); 
System.setProperty("webdriver.chrome.driver", file.getAbsolutePath()); 

这是我经常看到的大规模反模式。 webdriver.chrome.driver环境变量的设计目的是,您可以在不同位置的多个系统上安装chromedriver二进制文件,然后在每个系统上设置环境变量,以便如果在该系统上运行了硒测试,它将自动选择二进制文件的位置。

通过使用代码对环境变量进行硬编码,您将忽略构建构建代理程序时设置的任何预配置环境变量,而不会按预期方式使用它。

如果您坚持以这种方式进行操作,则应始终在设置之前检查env变量是否已设置,这样就不会覆盖现有的env变量。您还需要确保在构建代理程序上存在经过硬编码的文件路径(导致错误的第二个原因是没有),因此,如果未设置env变量,则实际上是在设置chromedriver二进制文件的有效路径。

答案 4 :(得分:0)

我认为您需要在实例中安装chrome。为此,您需要遵循以下基本命令

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
sudo yum install ./google-chrome-stable_current_*.rpm

google-chrome &

答案 5 :(得分:0)

我尝试过的这段代码解决了我一个星期未解决的问题,

感谢Aastha Chopra。

ChromeOptions chromeOptions =新的ChromeOptions(); chromeOptions.setBinary(“ C:\ Program Files(x86)\ Google \ Chrome Beta \ Application \ chrome.exe”); System.setProperty(“ webdriver.chrome.driver”,“ C:\ STUDY \ Selenium \ CHROMEDRIVERS \ chromedriver.exe”);

ChromeDriver驱动程序=新的C​​hromeDriver(chromeOptions); driver.get(“ http://newtours.demoaut.com/”);

答案 6 :(得分:0)

Mac用户,请确保将chromeBinary文件放置在bin文件夹中,如果chrome在下载中,则将其移动到应用程序中。

答案 7 :(得分:0)

  • 检查代理节点的操作系统。
  • 检查Jenkins如何访问代理节点。 如果其通过JNLP且操作系统位于Window 7下方,则通过Admin右键将Chrome安装在C:/ Program Files(x86)中,Jenkins可以在其中访问chrome.exe并使用以下代码设置二进制文件:
ChromeOptions options = new ChromeOptions();
if(System.getProperty("os.name").equals("Windows Server 2012 R2")){
    File ChromeExePath =new File("C:/Program Files (x86)/Google/Chrome/Application/chrome.exe");
    if (ChromeExePath.exists()){
        options.setBinary(ChromeExePath);
    }
}

ChromeDriver driver = new ChromeDriver(options);

答案 8 :(得分:0)

我在JS中遇到类似的问题,在安装npm i chromedriver

后已得到修复

答案 9 :(得分:0)

如果仍然无效,请检查您的二进制路径

您应该已经在计算机中安装了chrome

,并且您的chromedriver.exe版本应该相应(例如,如果您使用的是chrome 87.0 ver,则下载适用于87.0版本的chromedriver.exe)

从以下位置下载 https://chromedriver.chromium.org/downloads

,并为脚本提供了新的chromedriver.exe路径。

这对我来说很好

答案 10 :(得分:0)

ChromeOptions options = new ChromeOptions();
options.BinaryLocation="C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.SetCapability(ChromeOptions.Capability, options);
ChromeDriver driver = new ChromeDriver("C:\\test3", options);

This worked for me in C#. my chromedriver.exe is in test3 folder. Also my issue was that version of chrome was not same of chromedriver. This will definitely work:)
           

答案 11 :(得分:-1)

ChromeOptions chromeOptions= new ChromeOptions();
chromeOptions.setBinary("C:\\Program Files (x86)\\Google\\Chrome Beta\\Application\\chrome.exe");
System.setProperty("webdriver.chrome.driver","C:\\STUDY\\Selenium\\CHROMEDRIVERS\\chromedriver.exe");

ChromeDriver driver = new ChromeDriver(chromeOptions);
driver.get("http://newtours.demoaut.com/");

答案 12 :(得分:-1)

对我有用。我的编码如下

ChromeOptions chromeOptions= new ChromeOptions(); 

chromeOptions.setBinary("C:\\Users\\kannanu\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe");
System.setProperty("webdriver.chrome.driver",ChromeExePath);
ChromeDriver driver = new ChromeDriver(chromeOptions); 
driver.get("http://newtours.demoaut.com/");

答案 13 :(得分:-1)

我运行了以下命令以安装chromedriver并成功运行:

brew cask install chromedriver