[php-webdriver/webdriver]用PHP控制瀏覽器做自動化測試

PHP的一款對Selenium 的命令封裝度很高的庫,寫起來簡直太舒服了.

安裝教程請參考下面的進行安裝,本文主要是介紹怎麼使用

[php-webdriver/webdriver]用PHP控制瀏覽器做自動化測試

php-webdriver/webdriver是一個PHP寫的Selenium 擴展庫,可以用PHP控制瀏覽器的各種操作.

可以看這樣一段代碼,執行之後會打開瀏覽器,打開百度網頁,然後搜索PHP並且提交表單.

<?php
 
namespace FacebookWebDriver;
 
use FacebookWebDriverRemoteDesiredCapabilities;
use FacebookWebDriverRemoteRemoteWebDriver;
 
require_once('vendor/autoload.php');
 
// 設置selenium的服務器
$host = 'http://localhost:4444/wd/hub';
 
// 還用火狐瀏覽器
$capabilities = DesiredCapabilities::chrome();
 
$driver = RemoteWebDriver::create($host, $capabilities);
 
// 打開一個網頁
$driver->get('https://www.baidu.com');
 
// 找到搜索框的DOM,然後在搜索框輸入PHP
$driver->findElement(WebDriverBy::id('kw')) 
    ->sendKeys('PHP')
    ->submit(); // 提交表單
 

有時候我們要做一個自動化腳本演示,這是這個庫就派上用場了.

他封裝了眾多的selenium的命令,比如:

打開網頁

$result = $driver->get('https://www.binbinbiji.com/');

操作DOM元素
定位元素

// 定位一個元素:
$element = $driver->findElement(WebDriverBy::cssSelector('div.header'));
$headerText = $element->getText();
// 定位多個元素:
$elements = $driver->findElements(WebDriverBy::cssSelector('ul.foo > li'));
foreach ($elements as $element) {
    var_dump($element->getText());
}

支持多種選擇器:

Css 選擇器- WebDriverBy::cssSelector('h1.foo > small')
Xpath - WebDriverBy::xpath('(//hr)[1]/following-sibling::div[2]')
Id - WebDriverBy::id('heading')
Class 類 - WebDriverBy::className('warning')
Name 屬性 (inputs) - WebDriverBy::name('email')
標籤名 - WebDriverBy::tagName('h1')
鏈接的文本 - WebDriverBy::linkText('搜索')
鏈接的部分文本- WebDriverBy::partialLinkText('搜')

等待頁面的某個部分加載完成

$element = $driver->wait()->until(
    WebDriverExpectedCondition::presenceOfElementLocated(WebDriverBy::cssSelector('div.bar'))
);

獲取元素文本

$title = $driver->findElement(WebDriverBy::id('sign-in'))->getAttribute('title');
 
// Get value of an input/textarea element
$inputElement = $driver->findElement(WebDriverBy::id('username'));
$value = $inputElement->getAttribute('value');

獲取元素屬性

$title = $driver->findElement(WebDriverBy::id('sign-in'))->getDomProperty('innerHTML');

點擊元素

$driver->findElement(WebDriverBy::id('sign-in'))->click();

輸入內容

$driver->findElement(WebDriverBy::id('element id'))->sendKeys('PHP武器庫');

清空輸入

$driver->findElement(WebDriverBy::id('element id'))->clear();

實現其他鼠標事件

$element = $driver->findElement(WebDriverBy::id('some_id'));
$driver->getMouse()->mouseMove($element->getCoordinates());

複雜的點擊事件

如果元素可見,那麼執行點擊:

$element = $driver->findElement(WebDriverBy::id('element id'));
if ($element->isDisplayed()) {
    // 做點什麼
}

檢查Select是否選中

$checkboxElement = $driver->findElement(WebDriverBy::id('myCheckbox'));
if ($checkboxElement->isSelected()) {
    // ...
}

各種對於select的操作

$selectElement = $driver->findElement(WebDriverBy::name('language-select'));
$select = new WebDriverSelect($selectElement); // 對於radio則使用WebDriverRadio 
 
// 獲取第一個(默認的)選項:
echo $select->getFirstSelectedOption()->getText();
 
// 獲取全部的選項
$selectedOptions = $select->getAllSelectedOptions();
 
// 選擇一個選項
$select->selectByValue('fr');
$select->selectByIndex(1);
$select->selectByVisibleText('Czech');
$select->selectByVisiblePartialText('UK');

提交表單

對於一個表單,有多種提交方式.

<form id="myForm" method="post">
    <input type="text" name="query">
    <input type="submit" name="submit" value="Submit">
</form>
$driver->findElement(WebDriverBy::id('myForm'))
    ->submit(); // 標準的提交事件
 
$driver->findElement(WebDriverBy::name('query'))
    ->submit(); // 在input的提交事件
$driver->findElement(WebDriverBy::name('submit'))
    ->click(); // 點擊提交按鈕

獲取cookie,並輸出cookie

$cookies = $driver->manage()->getCookies();
$cookieStr = '';
        foreach ($cookies as $cookie) {
            $tmp = $cookie->toArray();
            $cookieStr .= $tmp['name'] . '=' . $tmp['value'] . "; ";
        }
echo $cookieStr;

其他瀏覽器操作

  • 警告框/選擇/取消
  • 頁面刷新/後退
  • 操作tab/iframe
  • 最大化/最小化/全屏
  • 執行注入JS
  • 截屏等

總之,它是一個健全的Selenium 操作庫,可以使用PHP完成瀏覽器自動化腳本.

本文轉自:https://blog.csdn.net/m0_57713228/article/details/123412285

到此為止。

發布者:彬彬筆記,轉載請註明出處:https://www.binbinbiji.com/zh-hant/php/2752.html

(0)
彬彬筆記彬彬筆記
上一篇 2022年7月26日 23:13
下一篇 2022年8月2日 18:12

相關推薦

發表回復

您的電子郵箱地址不會被公開。 必填項已用 * 標註

蜀ICP備14017386號-13