让WebdriverManager更新WebDriver


本文是Selenium / Appium Advent Calendar 2017的第4天。

我对第3天的故事感到不耐烦??,我想写有关Webdriver Mangar的文章。

触发使用

在2017年的一天,有一天测试突然停止工作。
遇到很多麻烦之后,另一个团队的人告诉我,Chrome版本升级后,我没有更新WebDriver。
我以为这很麻烦,但是在Selenide 4.7的发行说明中,我发现了有关Webdriver Manager的信息,该软件会自动下载最新的Webdriver,并立即开始使用它。

如何使用WebdriverManager

包含Selenide,因此让我们以实时使用的代码为例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Test
public void test() {
    // WebdriverManagerの処理は実質これだけ
    ChromeDriverManager.getInstance().setup();

    // 実行するとWebdriverのパスをシステムプロパティ設定してくれている
    String driverPath = System.getProperty("webdriver.chrome.driver");
    System.out.println(driverPath); // ~/.m2/repository/webdriver/chromedriver/mac64/2.33/chromedriver

    // あとは普通にテストを書くだけ
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("http://www.google.com/");

    WebElement element = webDriver.findElement(By.name("q"));
    element.sendKeys("Selenium/Appium Advent Calendar 2017");
    element.submit();

    System.out.println(webDriver.getTitle());

    webDriver.quit();
}

生成XXXDriverManager类,并调用setup方法来下载最新的Webdriver。
它根据浏览器将Webdriver路径设置为系统属性,因此您要做的就是根据需要编写测试。

支持的浏览器

  • 铬合金
  • 火狐浏览器
  • 歌剧
  • 幻影
  • 边缘
  • IE

如果您不想使用最新版本

如果使用最新的Webdriver有问题,则可以按以下方式修复版本。

1
2
3
4
5
// 最新を探しにいかない
ChromeDriverManager.getInstance().forceCache().setup();

// バージョン指定
ChromeDriverManager.getInstance().version("2.32").setup();

对于

Selenide,不能如上所述编写,因此请通过系统属性进行设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Test
public void test() {
    // システムプロパティに設定
    System.setProperty("wdm.chromeDriverVersion", "2.32");

    Configuration.browser = WebDriverRunner.CHROME;
    open("http://www.google.com/");

    String driverPath = System.getProperty("webdriver.chrome.driver");
    System.out.println(driverPath);

    $(By.name("q")).val("Appium Advent Calendar 2017").submit();

    System.out.println(Selenide.title());
}

与Selenium Grid

一起使用时

我尚未在现场使用它,但是我应该在启动Node之前调用setup。
我测试的以下代码令人困惑,因为它们是以混乱的方式编写的,但实际上,请考虑将Hub启动,Node启动和测试执行分别执行。 .. ..
实际使用它时,有必要通过定期重新启动Node或执行定期调用setup的程序来实现最新。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Before
public void setup() throws Exception {
    // Setup Chrome webdriver
    ChromeDriverManager.getInstance().setup();
    String driverPath = System.getProperty("webdriver.chrome.driver");
    System.out.println(driverPath);

    // Start hub
    GridLauncherV3.main(new String[]{"-port", "4444"});
    // Start node
    GridLauncherV3.main(new String[]{"-port", "5555",
            "-role", "node",
            "-hub", "http://localhost:4444/grid/register"
    });

    Configuration.remote = "http://localhost:4444/wd/hub";
    Configuration.browser = WebDriverRunner.CHROME;
}

@Test
public void test() {
    open("http://www.google.com/");
    $(By.name("q")).val("Appium Advent Calendar 2017").submit();
    System.out.println(title());
}

@After
public void tearDown() {
    close();
}

摘要

目前,在本地PC上运行测试时,我不再需要知道Webdriver的版本。
不必为每个执行环境(例如Windows和Mac)管理Webdriver也很好。
它尚未安装在Selenium Grid环境中,但由于有多个单元,因此似乎有效。
因此,让我们将WebDriver的更新留给WebdriverManager。