本文是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。