php-webdriverで指定のフォームに値を入力してみる


前回、Selenium + php-webdriverでSOY CMSのログイン画面でログインIDのフォームに値を入れ、

フォームの値を取り出して端末上に書き出す

という処理を書いてみた。


今回はログインIDとパスワードを入力して、

ログインボタンを押してログインを試してみる。


実際のコードは下記の通り、

※管理画面へログインできるアカウントをID、Pw共に「soycms」とします


<?php
require_once dirname(dirname(__FILE__)) . '/vendor/autoload.php';

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

//SOY CMSの管理画面のURL
$adminUrl = "http://localhost/cms/admin";

//SeleniumのホストのURL
$host = "http://localhost:4444/wd/hub";
$driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());
$driver->get($adminUrl);

//ログインIDのフォームにsoycmsと入力する
$element = $driver->findElement(WebDriverBy::name("Auth[name]"));
$element->clear();
$element->sendKeys("soycms");

//パスワードのフォームにsoycmsと入力する
$element = $driver->findElement(WebDriverBy::name("Auth[password]"));
$element->clear();
$element->sendKeys("soycms");

//ログインボタンのname属性を指定して要素を取得した直後にsubmitする
$driver->findElement(WebDriverBy::name("ログイン"))->submit();

実行後に自動で起動したブラウザを確認すると、



ようこそSOY CMSへ!の画面が表示されたので、

無事にログインできたことになります。


ログインボタンをクリックする時、

ログインボタンは<input type="submit">で設置するので、

入力用の<input type="text">と同じようにgetElement()メソッドでオブジェクトを取得して、

sumit()メソッドを実行すれば、submitのオブジェクトを押したことになる。


php-webdriverではフォームもボタンもひっくるめて、

DOMの要素はgetElementで取得するということなのね。