当前位置: 首页 > 工具软件 > php-webdriver > 使用案例 >

php自动测试工具,使用 php-webdriver 实现自动化测试

曹子平
2023-12-01

本文我们讨论一下如何使用 php 实现自动化测试。

一、技术选型

php + facebook/webdriver + selenium

Selenium是一套完整的Web应用程序测试系统,它提供了一系列的操作浏览器的 API

webdriver 是 facebook 开发的一套 selenium API 的客户端组件,使用 composer 作为依赖管理工具。

二、环境搭建

php 的开发环境

webdriver 使用 composer 做依赖管理,所以需要安装 composer

selenium-server 需要 java 运行环境

环境配置自己搞定,很简单,这里就不做赘述了。

三、开始使用

安装 php-webdriver

composer require facebook/webdriver

运行 Selenium 服务, 首先你需要到 selenium 官网去下载 selenium-server-standalone-#.jar,

下载地址请狠狠的 戳这里.

java -jar -Dwebdriver.chrome.driver="driver/chromedriver" selenium-server-standalone.jar -port 4444

需要指定一个 chromedriver(一个阉割版的 chrome 浏览器) ,这里是下载地址

也可以去我的百度网盘下载 chromedriver, 密码:8t4p.

然后创建一个会话,并指定你的服务器运行的地址和端口。

$host = 'http://localhost:4444/wd/hub';

启动火狐浏览器,前提是你安装了火狐的 Geckodriver

$driver = RemoteWebDriver::create($host, DesiredCapabilities::firefox());

或者启动 chrome 浏览器

$driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());

你也可以自定义配置你的浏览器

$host = 'http://localhost:4444/wd/hub';

$capabilities = DesiredCapabilities::chrome();

$driver = RemoteWebDriver::create($host, $capabilities, 5000);

更多配置,请参考 这里.

设置浏览器窗口

$size = new WebDriverDimension(1280, 900);

$driver->manage()->window()->setSize($size);

$driver->manage()->window() 返回的是一个 WebDriverWindow, 它提供了以下 API

方法名称

方法说明

getPosition(), setPosition()

获取,设置浏览器的位置

getSize(), setSize()

获取,设置浏览器大小

maximize()

最大化窗口

发送请求

$driver->get('http://www.jd.com');

操作 DOM 元素

webdriver 主要提供了 2 个 API 来给我们操作 DOM 元素

RemoteWebDriver::findElement(WebDriverBy) 获取单个元素

RemoteWebDriver::findElements(WebDriverBy) 获取元素列表

WebDriverBy 是查询方式对象,提供了下面几个常用的方式

WebDriverBy::id($id) 根据 ID 查找元素

WebDriverBy::className($className) 根据 class 查找元素

WebDriverBy::cssSelector($selctor) 根据通用的 css 选择器查询

WebDriverBy::name($name) 根据元素的 name 属性查询

WebDriverBy::linkText($text) 根据可见元素的文本锚点查询

WebDriverBy::tagName($tagName) 根据元素标签名称查询

WebDriverBy::xpath($xpath) 根据 xpath 表达式查询,这个很强大。

不了解什么是 xpath 的请参考我前面的文章 XPath 语法

实例

// id 查询

$input = $driver->findElement(

WebDriverBy::id('key')

);

//往输入框填入元素

$input->sendKeys('iPhone 8');

// xpath 查询

$button = $input->findElement(

WebDriverBy::xpath("../button[1]")

);

$button->click(); //单击按钮

//获取列表的 a 标签

$links = $driver->findElements(WebDriverBy::cssSelector(".goods-list > .p-img > a"));

$aTags = [];

foreach($links as $value) {

array_push($aTags, array(

'href' => $value->getAttribute('href'),

'title' => $value->getAttribute("title")

));

}

print_r($aTags);

cookies 操作

// fetch cookies

$cookies = $driver->manage()->getCookies();

// delete cookies

$driver->manage()->deleteAllCookies();

// add cookies

$driver->manage()->addCookie(array(

'name' => 'cookie_name',

'value' => 'cookie_value',

));

$cookies = $driver->manage()->getCookies();

键盘操作

RemoteKeyboard::sendKeys() 输入内容到当前 focus 的元素

RemoteKeyboard::pressKey($key) 按下某个键

RemoteKeyboard::releaseKey($key) 释放某个键

$driver->getKeyboard()->sendKeys("登录");

$driver->getKeyboard()->pressKey(WebDriverKeys::SHIFT); //按下 Shift 键

$driver->getKeyboard()->releaseKey(WebDriverKeys::SHIFT);

鼠标操作

WebDriverMouse::click(WebDriverCoordinates) 单击鼠标

WebDriverMouse::doubleClick(WebDriverCoordinates) 双击鼠标

WebDriverMouse::mouseDown(WebDriverCoordinates) 触发 mousedown 事件

WebDriverMouse::mouseUp(WebDriverCoordinates) 触发 mouseup 事件

WebDriverMouse::click(WebDriverCoordinates, $x, $y) 移动鼠标到指定的位置,触发 mousemove 事件

注入 JS 代码

RemoteWebDriver::executeScript($script, $args) 执行同步js代码

RemoteWebDriver::executeAsyncScript($script, $args) 执行异步 js 代码

$driver->executeScript("document.body.scrollTop = 1000; alert(arguments[0])", ["fuck"]);

截图

$driver->takeScreenshot("test.png");

 类似资料: