PHP Selenium 自动化测试-初始设置

当你在开发一个大型的项目时,往往会因为需求复杂,或是年代久远,没有人记得当初某些功能是怎么完成的,而造成新人不敢修改,老人一改就把旧功能改坏掉,一个好的自动化测试工具在这种状态就非常的重要,除了程序必需撰写的Unit test之外,通常我们还要加上E2E测试,例如使用Selenium。

Selenium是一个用来模拟真人的自动化测试工具,它可以操作网页浏览器,自动连接网页,输入数据,然后自动点击Form Post按钮等等各种强大的功能,另外他们支持多个浏览器,能够帮前端工程师抓到CSS/JS Error。

Selenium是Server端的工具,另外我们还必需使用一个Client端来传送指令给Selenium,这个工具我们统称为WebDriver。

如何使用Selenium与WebDriver

接下来我会一步一步教你如何安装Selenium,并且写一段简单的PHP来进行测试。

安裝 Java

Selenium是用Java写成的,所以你一定要在你的操作系统中安装Java,请先至下面这个Java官网下载Java并安装。

  1. https://www.java.com/zh_TW/download/help/windows_manual_download.xml

启动Seleniun

首先我们得先下载Selenium这套软件,你可以从这个网址下载 http://docs.seleniumhq.org/download/ 下载回来是一个Java Jar档,
启动的指令如:java -jar selenium-server-standalone-2.39.0.jar。

另一个下载点 http://selenium-release.storage.googleapis.com/index.html

成功启动Selenium后,你可以使用telnet localhost 4444,或是打开Browser连上这个网址http://127.0.0.1:4444/wd/hub ,Selenium预设会使用4444 Port来接收指令,如果你看到的画面如下,就代表Selenium已经启动成功!

Facebook WebDriver

WebDriver就是一个用来控制Selenium动作的Library,称之为Driver因为他就像网卡一样,网卡是用来控制网络传输,而WebDriver是用来控制Selenium,这里我使用的WebDriver是从Facebook Git上抓来下的,你可以在https://github.com/facebook/php-webdriver 这里下载得到。

接着我们写一小段程序,呼叫Selenium打开Firefox Browser并且连上Google首页

<?php
require_once "./php-webdriver/lib/__init__.php";
$capabilities = array(
    WebDriverCapabilityType::BROWSER_NAME => 'firefox'
);
$seleniumUrl = 'http://localhost:4444/wd/hub';
$driver = RemoteWebDriver::create($seleniumUrl, $capabilities, 5000);
$driver->get("http://www.google.com.tw/");
sleep(5);
$driver->close();

程序有正确执行的话,你应该会看到你的电脑打开了Firefox,并连上Google首面,我有故意在程序中加上sleep 5秒,这是怕selenium一执行完毕,就会自动关闭Browser,这样会来不及确认是否有连到Google。

“capabilities” 這個參數是用來指定基本設定,例如上面的範例中我指定了 Browser = firefox 。

自动打动网页,并点击连接的示例

这是稍复杂一点的示例,功能是连上我开发好的页面,并且点击一个连接,然后等待Browser加载页面完成后,再继续执行接下来的指令。

$url = $driver->getCurrentUrl();
error_log( "url = " . $url);
//change url and wait
$elm = $driver->findElement(
  WebDriverBy::cssSelector('.nav-box a:nth-of-type(1)')
);

$elm->click();
// wait for at most 10 seconds until the URL is ‘http://example.com/’.
// check again 500ms after the previous attempt.
KaTeX parse error: Expected 'EOF', got '&' at position 8: driver-&̲gt;wait(10, 500…driver) {
if ($driver->getCurrentURL() === ‘http://www.puritys.me/news’) {
error_log(“Document is complete”);
return true;
} else {
return false;
}
});

error_log(“test”);
$driver->close();

設定視窗的尺寸,長寬

$driver = RemoteWebDriver::create($seleniumUrl, $capabilities, 5000);
$manage = $driver->manage();

$window = $manage->window();
$dimension = $window->getSize();

$height = $dimension->getHeight(); //取得視窗的高
$width = $dimension->getWidth(); //取得視窗的寬

$newSize = new WebDriverDimension(100,200); // 設定視窗的寬高 = 100x200
KaTeX parse error: Expected 'EOF', got '&' at position 8: window-&̲gt;setSize(newSize);

如何将视窗最大化

平常我们在使用Selenium时,最好都将Window视窗调成最大化,避免Selenium因为Element不在画面上而选不到,最大化的方式很简单,使用maximize即可。

$manage = $driver->manage();
$window = $manage->window();
$window->maximize();

取得視窗位置與移動

$position = $window->getPosition();
echo  $position->getX();
echo  $position->getY();

//移動視窗
$position->move(200, 0);
KaTeX parse error: Expected 'EOF', got '&' at position 8: window-&̲gt;setPosition(position);

Selenium Protocol

  1. https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol
    WebDriver不管开发者是谁,功能如何强力,他的Server一定还是Selenium,所以你只要了解Selenium所支持的功能,就能猜出WebDriver大概要怎么使用了,也可以知道Selenium所支持的API有哪一些。

其它相关

driver 能夠使用的 method ,可以在 php-webdriver/lib/remote/RemoteWebDriver.php 中找到,例如 findElement 這個 Method 。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值