[php-webdriver/webdriver]用PHP控制浏览器做自动化测试

2643阅读
0评论
0点赞

PHP的一款对Selenium 的命令封装度很高的库,写起来简直太舒服了.   php-webdriver/webdriver是一个PHP写的Selenium 扩展库,可以用PHP控制浏览器的各种操作. 可以看这样一段代码,执行之后会打开浏览器,打开百度网页,然后搜索PHP并且提交表单. get('https://www.baidu.com'); // 找到搜索框的DOM,然后在搜索框输入PHP $driver->findElement(WebDriverBy::id('kw')) ->sendKeys('PHP') ->submit(); // 提交表单 有时候我们要做一个自动化脚本演示,这是这个库就派上用场了. 他封装了众多的selenium的命令,比如: 打开网页 $result = $driver->get('https://phpreturn.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'); 提交表单 对于一个表单,有多种提交方式.

$driver->findElement(WebDriverBy::id('myForm')) ->submit(); // 标准的提交事件 $driver->findElement(WebDriverBy::name('query')) ->submit(); // 在input的提交事件 $driver->findElement(WebDriverBy::name('submit')) ->click(); // 点击提交按钮 其他浏览器操作 警告框/选择/取消 页面刷新/后退 操作tab/iframe 最大化/最小化/全屏 执行注入JS 截屏等 总之,它是一个健全的Selenium 操作库,可以使用PHP完成浏览器自动化脚本.

评论(0)
暂无评论