この記事はSelenium/Appium Advent Calendar 2018の16日目です。
昨年はWebDriverの更新はWebdriverManagerに任せようという記事を書きました。
その記事の中で触れた、Selenium GridのNodeで自動的にWebDriverの自動更新を実現しているので小ネタですが、空いているようなので書かせて頂きます。
実装はかなり雑で、1日1回スレッドを起こしてWebDriverManagerで最新のWebDriverを更新しにいきます。
本当はテストの前処理として差し込むのがスマートなんですが、実現方法が分からない(調べてもない)のと、実用上困っていないので追求していません...
service.scheduleAtFixedRate(StartHub::setup, 0, 1, TimeUnit.DAYS);
private static void setup() {
logger.info("update webdriver");
WebDriverManager.chromedriver().setup();
WebDriverManager.firefoxdriver().setup();
WebDriverManager.edgedriver().setup();
WebDriverManager.iedriver().setup();
}
コードの全量です。WebDriverの更新以外はSelenium GridのNodeを起動する以外していません。
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import org.openqa.grid.selenium.GridLauncherV3;
import io.github.bonigarcia.wdm.WebDriverManager;
public class StartHub {
private static final Logger logger = Logger.getLogger(StartHub.class.getName());
private static void setup() {
logger.info("update webdriver");
WebDriverManager.chromedriver().setup();
WebDriverManager.firefoxdriver().setup();
WebDriverManager.edgedriver().setup();
WebDriverManager.iedriver().setup();
}
public static void main(String[] args) {
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(StartHub::setup, 0, 1, TimeUnit.DAYS);
// Start node
GridLauncherV3.main(new String[]{"-port", "5555",
"-role", "node",
"-hub", "https://myjenkins.example.com:4444/grid/register",
"-log", "selenium-grid.log"
});
logger.info("start hub");
}
}
これをjarに固めてjavaコマンドを叩くことで常駐させています。
java -jar build/libs/start-selenium-grid-hub-1.0.jar
放っておいても勝手にアップデートしてくれるので大分楽かと思います。