Selenium + Jenkins + phpwebdriver + Chromiumのヘッドレスでテストの自動化を行っている。

Jenkins + ヘッドレスChromeでテスト自動化の省力化


先日、


selenium_memo_widget_error


selenium_memo_widget_error1


SOY CMSとSOY Shopに常に画面左下に設置されるメモウィジェットを設置して、テストにかけてみたら、

PHP Fatal error: Uncaught Facebook\WebDriver\Exception\UnrecognizedExceptionException: element click intercepted: Element <a href="javascript:void(0);">...</a> is not clickable at point (333, 592). Other element would receive the click: <button class="btn btn-success" id="memo_widget_button">...</button>

というエラーでテストが停止した。


エラーを読むと、新規に追加したメモウィジェットの開くボタンによって、対象のボタンが押せなくなったというエラーらしい。

このエラーを解消せずにChromiumの通常モード(ヘッドレスではない)で確認してみるとこのエラーは表示されない。

※すべてのコードを確認したわけではない


どうやらヘッドレスで縦長のページでどうやらボタンまでスクロールされないことが原因らしい。

というわけで、試しにJenkins + ヘッドレスChromeでテスト自動化の省力化に記載したヘッドレス化のコードを下記のように改修してみた。


<?php
require_once 'autoload.php';

use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Facebook\WebDriver\WebDriverBy;

$host = "http://example.com:4444/wd/hub";
$caps = DesiredCapabilities::chrome();

//ヘッドレスChromeを使用するための手続き
$options = new ChromeOptions();
$options->addArguments(['--headless']);
$options->addArguments(["window-size=1024,2048"]);
$caps->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = RemoteWebDriver::create($host, $caps);

//実際のテストコードを書く

改修内容は画面サイズを1024✕2048で開くという処理を追加してみた。

これで再度テストにかけてみたら、上記のエラーは発生しなくなった。


ただ、これでは縦が2048以上のページではエラーは発生してしまうし、縦が短いページでは無駄にメモリを使用してスマートではない。

どうやら他にスクロールという手があるみたいだけれども、それはそのうち検証してみる。

Facebook\WebDriver\Support\Events\EventFiringWebElement | php-webdriver API


追記

最終的にはCSSの方でメモボタンが管理画面の様々なボタンを覆わないように修正した