athena-oss / php-fluent-webdriver-client
PHP Fluent WebDriver 客户端
Requires
- facebook/webdriver: 1.1.1
- guzzlehttp/guzzle: ^6.0
- symfony/event-dispatcher: 3.1.3
Requires (Dev)
- phake/phake: ^2.2
- phpunit/phpunit: 5.1.1
This package is not auto-updated.
Last update: 2024-09-28 20:09:11 UTC
README
用于编写浏览器测试的流畅 DSL。
目录
安装
推荐的安装方法是使用 Composer
$ composer require athena-oss/php-fluent-webdriver-client:dev-master
外部要求
该库旨在与 Selenium 一起使用,Selenium 负责在不同的浏览器厂商后面包装统一的 WebDriver 规范。为了能够运行本文件中包含的代码示例,您需要本地下载并运行 Selenium。为了运行代码示例,您还需要安装 PhantomJS。
用法
该库通过提供一个有偏见的 DSL 来尝试减少编写浏览器测试所需的样板代码。DSL 允许两种不同的测试模式
- 同步断言
- 异步断言
同步断言
同步断言是以以下模式表达的
- 获取 URL
- 将获取的 HTML 文档转换为页面对象
- 通过自定义选择器查找元素
- 断言元素是启用/选中/可见等
- (可选)对元素执行操作(点击、清除、提交)
示例
namespace OLX\SampleWebDriver\Tests; use OLX\FluentWebDriverClient\Browser\Browser; use OLX\FluentWebDriverClient\Browser\BrowserDriverBuilder; class WikipediaBrowserTest extends \PHPUnit_Framework_TestCase { public function testArticlePage_RegularArticleInEnglish_ShouldDisplayArticleTitleAsHeader() { $driver = (new BrowserDriverBuilder('https://:4444/wd/hub')) ->withType('phantomjs') ->build(); $browser = new Browser($driver); $browser->get('https://en.wikipedia.org/wiki/Athena') ->getElement() ->withCss('h1#firstHeading') ->assertThat() ->isHidden() ->thenFind() ->asHtmlElement(); } }
运行上述测试会失败(抛出异常),因为匹配给定 CSS 的元素存在于 DOM 中且可见。
异步断言
同步断言是以以下模式表达的
- 获取 URL
- 将获取的 HTML 文档转换为页面对象
- 通过自定义选择器查找元素
- 等待元素上的条件(超时表示断言失败)
- (可选)对元素执行操作(点击、清除、提交)
示例
namespace OLX\SampleWebDriver\Tests; use OLX\FluentWebDriverClient\Browser\Browser; use OLX\FluentWebDriverClient\Browser\BrowserDriverBuilder; class WikipediaBrowserTest extends \PHPUnit_Framework_TestCase { public function testArticlePage_RegularArticleInEnglish_ShouldDisplaySpecialHeaderAfter3Seconds() { $driver = (new BrowserDriverBuilder('https://:4444/wd/hub')) ->withType('phantomjs') ->build(); $browser = new Browser($driver); $browser->get('https://en.wikipedia.org/wiki/Athena') ->getElement() ->withCss('h1#specialHeading') ->wait(3) ->toBeVisible() ->thenFind() ->asHtmlElement(); } }
运行上述测试会失败(抛出异常),因为匹配给定 CSS 的元素在 DOM 准备好 3 秒后不存在。
DSL 的视觉表示
下面的图表说明了可以在调用链的每个状态下调用的方法。一些关键点
- 每个矩形内的名称(如果没有前缀),对应于库中的接口和类
- FB 前缀对应于 Facebook PHP WebDriver 包
Facebook WebDriver 依赖
Facebook PHP WebDriver 是库与 Selenium HTTP API 之间所有通信的底层实现。在其当前状态下,DSL 无法完全隐藏 Facebook 实现。因此,如果您使用任何返回 Facebook 类型的 DSL 方法,建议您阅读他们的文档。
用我们自己的 Selenium API 抽象替换 Facebook 实现目前不是项目的主要优先事项之一,但我们正在考虑将其实现(作为一个主要、向后不兼容的版本)。
API 文档
提供 API 文档。
贡献
请参阅我们在 CONTRIBUTING.md 上的贡献指南。
版本控制
使用 GitHub 的发布功能管理版本。我们使用 语义版本 管理所有版本。对代码库所做的每次更改都将包含在发布说明中(除清理和重构外)。
许可
本产品遵循Apache许可证第2版(APLv2)。