はじめに
普段Seleniumを使っていて、ChromeDeveloperToolsに出てくるConsoleログを取得したいと思ったことが何度かあります。
Puppeteer等を使い取得する手段もありますが、Selenium4でも取得できるようになりそうなので、試してみた内容を書き留めます。
まだ、調べ途中なのと、Selenium4がα版で変更される可能性も高いので(1)としておきます。
環境情報
対象 | Version |
---|---|
OS | Mac OS X 10.15.5 |
java | 1.8.0_252 |
Chrome | 83.0.4103.116 |
ソースコード
build.gradle
今回は以下のライブラリを使用しました。
build.gradle
dependencies {
//junit
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.6.2'
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.6.2'
//selenium
testCompile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.0.0-alpha-6'
//WebdriverManager
testCompile group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '4.0.0'
}
実装コード
//import文は省略
public class Selenium4Cdp {
private ChromeDriver driver;
@BeforeEach
void setup(){
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
@Test
void SeleniumSample() throws InterruptedException {
DevTools devTools = driver.getDevTools();
devTools.createSession();
devTools.send(Log.enable());
devTools.addListener(Log.entryAdded(), (responseReceived -> {
String level = responseReceived.getLevel().toString();
String text = responseReceived.getText();
Optional<String> url = responseReceived.getUrl();
System.out.println("[Log] " + level + ": " + text + ": " + url );
}));
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
System.out.println("========== HC Top ==========");
driver.get("https://www.humancrest.co.jp");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".btn.fade01")));
System.out.println("========== HC Service ==========");
driver.findElement(By.xpath("//a[text()='サービス ']")).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[text()='テスト / 運用自動化サービス']")));
}
@AfterEach
void tearDown(){
driver.quit();
}
}
実行結果
このような実装をすると、以下のようにLogLevelがErrorとWarningのものが出力されます。
devToolsの宣言をしてるのは1箇所ですが、画面遷移した時も常にConsoleログを取得してくれそうです。
========== Top ==========
[Log] error: Failed to load resource: the server responded with a status of 404 (): Optional[https://www.googletagmanager.com/gtm.js?id=XXXXXX]
[Log] warning: A cookie associated with a resource at http://lmsg.jp/ was set with `SameSite=None` but without `Secure`. A future release of Chrome will only deliver cookies marked `SameSite=None` if they are also marked `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/XXXXXXX.: Optional[https://www.humancrest.co.jp/]
========== Service ==========
[Log] error: Failed to load resource: the server responded with a status of 404 (): Optional[https://www.googletagmanager.com/gtm.js?id=XXXXXX]
おわりに
実際にSeleniumのソースコードを見てみると、lineNumberやstack等、その他にも取得できるものが色々ありそうです。
Selenium4でできることについて分かったことが増えたら、また色々書こうと思います。