0

我正在使用 selenium 3.0.0-beta4 版本。试图在我的项目中配置 geckoDriver 的设置。我将 Maven 和 TestNG 与 java 一起使用。

import java.util.concurrent.TimeUnit;
import org.testng.annotations.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.WebDriver;

public class GmailSignupAutomation {
    private WebDriver driver;
      private String baseUrl;

 @BeforeClass(alwaysRun = true)
      public void setUp() throws Exception {System.setProperty("webdriver.gecko.driver","D://software_/geckodriver-v0.11.1-win64/geckodriver.exe");

      DesiredCapabilities capabilities = DesiredCapabilities.firefox();
      capabilities.setCapability("marionette", true);
      **driver = new FirefoxDriver(capabilities);**

        baseUrl = "https://accounts.google.com/";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
      }

@Test
      public void testGoogleAccountLoginForm() throws Exception {
        driver.get(baseUrl + "//SignUp?service=mail&continue=https://mail.google.com/mail/?pc=topnav-about-en");
        driver.findElement(By.id("FirstName")).clear();
        driver.findElement(By.id("FirstName")).sendKeys("HOSSAIN");
      }

@AfterClass(alwaysRun = true)
      public void tearDown() throws Exception {
        driver.quit();
      }

}

这是输出:

1476438749160 geckodriver INFO 监听 127.0.0.1:39530 2016 年 10 月 14 日下午 3:52:29 org.openqa.selenium.remote.ProtocolHandshake createSession

信息:尝试双语会话,假设 Postel 定律在远程端成立

1476438749613 mozprofile::profile INFO 使用配置文件路径 C:\Users\HOSSAI~1.MAH\AppData\Local\Temp\rust_mozprofile.e9aWwalq9rWK

1476438749656 geckodriver::marionette INFO 启动浏览器 C:\Program Files\Mozilla Firefox\firefox.exe

1476438749683 geckodriver::marionette INFO 连接到 localhost:61519 上的 Marionette 2016 年 10 月 14 日下午 3:52:32 org.openqa.selenium.remote.ProtocolHandshake createSession

信息:回退到直接 W3C 远程端连接

1476438752490 mozprofile::profile INFO 使用配置文件路径 C:\Users\HOSSAI~1.MAH\AppData\Local\Temp\rust_mozprofile.D6FkME6daU3V

1476438752499 geckodriver::marionette INFO 启动浏览器 C:\Program Files\Mozilla Firefox\firefox.exe

1476438752535 geckodriver::marionette INFO 连接到 localhost:61527 上的 Marionette 2016 年 10 月 14 日下午 3:52:37 org.openqa.selenium.remote.ProtocolHandshake createSession

信息:回退到原始的 OSS JSON Wire 协议。1476438757062 mozprofile::profile INFO 使用配置文件路径

C:\Users\HOSSAI~1.MAH\AppData\Local\Temp\rust_mozprofile.FHKHmYIM3lXI

1476438757069 geckodriver::marionette INFO 启动浏览器 C:\Program Files\Mozilla Firefox\firefox.exe

1476438757127 geckodriver::marionette INFO 连接到 localhost:61557 上的 Marionette

[Utils] 尝试创建 D:\Projects\Automation\GoogleSignupAutomation\test-output\Default suite\Default test.xml

[Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\Default 套件存在:true

配置失败:@BeforeClass 设置 org.openqa.selenium.SessionNotCreatedException:无法创建新的远程会话。所需功能 = 功能 [{marionette=true, browserName=firefox, version=, platform=ANY}],所需功能 = 功能 [{}]

构建信息:版本:'未知',修订:'3169782',时间:'2016-09-29 10:24:50 -0700' 系统信息:主机:'XYZ',ip:'101.140.178.123',操作系统。名称:'Windows 7',os.arch:'amd64',os.version:'6.1',java.version:'1.8.0_102'

驱动程序信息:驱动程序版本: org.openqa 的 org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:80) 的 FirefoxDriver.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:141) 的 org.openqa .selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:602) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver .java:242) 在 org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:129) 在 org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:247) 在 org.openqa.selenium.firefox。 FirefoxDriver.(FirefoxDriver.java:235) 在 org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:230) 在 org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:226) 在 org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:124) 在 SeleniumAutomation.GoogleSignupAutomation.GmailSignupAutomation.setUp(GmailSignupAutomation.java:39) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在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:100) 在 org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:515) 在 org.testng.internal.Invoker.invokeConfigurations(Invoker.java:216) 在 org.testng.internal.Invoker.invokeConfigurations(Invoker .java:143) 在 org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:169) 在 org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) 在 org.testng.TestRunner.privateRun(TestRunner.java:746) 在 org.testng.TestRunner.run(TestRunner.java:600) 在org.testng.SuiteRunner.runTest(SuiteRunner.java:366) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319) at org.testng.SuiteRunner .run(SuiteRunner.java:268) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG. java:1264) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:1189) 在 org.testng.TestNG.runSuites(TestNG.java:1104) 在 org.testng.TestNG.run(TestNG.java:1076) 在org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG。java:126) 在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:152) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:57)

配置失败:@AfterClass tearDown java.lang.NullPointerException at SeleniumAutomation.GoogleSignupAutomation.GmailSignupAutomation.tearDown(GmailSignupAutomation.java:55) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:100) at org.testng.internal。 Invoker.invokeConfigurationMethod(Invoker.java:515) 在 org.testng.internal.Invoker.invokeConfigurations(Invoker.java:216) 在 org.testng.internal.Invoker.invokeConfigurations(Invoker.java:143) 在 org.testng.internal .TestMethodWorker.invokeAfterClassMethods(TestMethodWorker.java:217) 在 org.testng。internal.TestMethodWorker.run(TestMethodWorker.java:115) at org.testng.TestRunner.privateRun(TestRunner.java:746) at org.testng.TestRunner.run(TestRunner.java:600) at org.testng.SuiteRunner.runTest (SuiteRunner.java:366) 在 org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361) 在 org.testng.SuiteRunner.privateRun(SuiteRunner.java:319) 在 org.testng.SuiteRunner.run(SuiteRunner.java: 268) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1264) at org. testng.TestNG.runSuitesLocally(TestNG.java:1189) at org.testng.TestNG.runSuites(TestNG.java:1104) at org.testng.TestNG.run(TestNG.java:1076) at org.testng.remote.AbstractRemoteTestNG .run(AbstractRemoteTestNG.java:126) 在组织。testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:152) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:57)

跳过:testGoogleAccountLoginForm

Default test
Tests run: 1, Failures: 0, Skips: 1

配置失败:2,跳过:0

================================================= 默认套件总计测试运行:1,失败:0,跳过:1 配置失败:2,跳过:0

[TestNG] org.testng.reporters.XMLReporter@3b938003 花费的时间:50 毫秒 [TestNG] org.testng.reporters.EmailableReporter2@475e586c 花费的时间:12 毫秒 [Utils] 尝试创建 D:\Projects\Automation\GoogleSignupAutomation \test-output\old\Default suite\toc.html [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default suite exists: true [Utils] Attempting to create D:\Projects\Automation\ GoogleSignupAutomation\test-output\old\Default suite\Default test.properties [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default suite exists: true [Utils] Attempting to create D:\Projects\ Automation\GoogleSignupAutomation\test-output\old\Default suite\index.html [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default 套件存在:true [Utils] 正在尝试创建 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default suite\main.html [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default 套件存在: true [Utils] 正在尝试创建 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default suite\groups.html [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default suite存在:true [Utils] 正在尝试创建 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default suite\classes.html [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default套件存在:true [Utils] 正在尝试创建 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default suite\reporter-output.html [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default 套件存在:true [Utils] Attempting to create D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default suite\methods-not-run.html [ Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default 套件存在:true [Utils] Attempting to create D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default suite\testng.xml .html [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\old\Default 套件存在:true [Utils] Attempting to create D:\Projects\Automation\GoogleSignupAutomation\test-output\old\index.html [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\old 存在:true [TestNG] org.testng.reporters.SuiteHTMLReporter@780cb77 花费的时间:95 毫秒 [Utils] 尝试创建 D:\Projects\Automation\GoogleSignupAutomation\test-output\junitreports\TEST-SeleniumAutomation.GoogleSignupAutomation.GmailSignupAutomation.xml [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\junitreports 存在:true [TestNG] 组织花费的时间.testng.reporters.JUnitReportReporter@3a079870:106 毫秒 [TestNG] org.testng.reporters.jq.Main@17c1bced 花费的时间:241 毫秒 [Utils] 尝试创建 D:\Projects\Automation\GoogleSignupAutomation\test-output\ testng-failed.xml [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output 存在:true [Utils] 正在尝试创建 D:\Projects\Automation\GoogleSignupAutomation\test-output\Default suite\testng-failed。 xml [Utils] 目录 D:\Projects\Automation\GoogleSignupAutomation\test-output\Default 套件存在:true [TestNG] [FailedReporter 通过=0 失败=0 跳过=0] 花费的时间:8 毫秒

4

2 回答 2

1

我认为在设置驱动程序路径后,您需要将 DesiredCapabilities 设置为 MarionetteDriver,如下面的代码所示。对我有用。

DesiredCapabilities capabilities = DesiredCapabilities.firefox();
                            capabilities.setCapability("marionette", true);
                            Driver = new MarionetteDriver(capabilities);
于 2016-10-14T12:21:20.060 回答
1

您可以尝试以下步骤:

  1. 下载木偶驱动
  2. 将其解压缩到您选择的文件夹中
  3. 在您的代码中,将“webdriver.gecko.driver”属性设置为 .exe 的位置
  4. 使用 MarionetteDriver
  5. 将文件重命名为“wires.exe”并将其添加到您的路径中。

我确实将它重命名为wires.exe,主要是为了保持代码一致,这样我就不必每次更改木偶驱动程序的版本时都更新代码。

但我没有将它添加到路径中。当提供选项时,我宁愿在代码中控制它。

Firefox 47 及更高版本我的代码如下所示:

String currentDir = System.getProperty("user.dir");
String marionetteDriverLocation = currentDir + "/tools/marionette/wires.exe";
System.setProperty("webdriver.gecko.driver", marionetteDriverLocation);
WebDriver driver = new MarionetteDriver();

您可以从以下 github 示例代码中检查代码更新:https ://github.com/kumrunnaharkeya/sample-automation-selenium

于 2016-10-19T02:59:13.697 回答