我有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
答案 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驱动程序=新的ChromeDriver(chromeOptions); driver.get(“ http://newtours.demoaut.com/”);
答案 6 :(得分:0)
Mac用户,请确保将chromeBinary文件放置在bin文件夹中,如果chrome在下载中,则将其移动到应用程序中。
答案 7 :(得分:0)
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