验收测试 - WebDriver - 执行JS

  • 作者:KK

  • 发表日期:2015.12.13


在WebDriver的验收测试下,如果一个页面包含了JS代码,那么被浏览器加载了页面的时候自然就会运行,不然你怎么能看到页面上的各种DOM被完整地渲染?你试试

$I->amOnUrl('http://www.qq.com');	//切换域名
$I->amOnPage('/');	//进入首页
$I->wait(10);	//暂停10秒

然后你可以看到浏览器完整地显示了腾讯首页,这个首页当然有JS的了,比如一些广告加载的JS,一些天气JS,日期提示JS...各种,自己查看浏览器页面源代码就能看到好多


执行自定义JS

你可以在PHP代码里写一些JS代码字符串传达给浏览器执行,比如这样:

$jsCode = 'document.body.innerHTML = "嘿嘿,我是来自PHP的捣乱者!";';
$I->executeJs($jsCode);
$I->wait(3);		//暂停3秒,因为如果不暂停的话,执行完最后一句测试代码就会马上关掉浏览器,所以我特地加上这个代码让你多看几秒效果而已,免得一闪而过似有似无

而且这些JS代码与页面上的JS是处于同一个沙箱里的,于是可以互相调用,假设页面上引入了 jQuery

$jsCode = <<<JS
	var div = $('<div style="height:100px;background:red;"></div>');
	$('body').html(div);
	div.animate({
		height : '800px'
	}, 5000);
JS;
$I->executeJs($jsCode);
$I->wait(6);	
$I->executeJs('$("#login").click()');

来来来,我们还可以把页面的数据抓上来:

$linksHtml = $I->executeJs('return $("body a").html()');
file_put_contents('links.html', $linksHtml);

$payMoney = $I->executeJs('return $("#payMoney").val()');	//假设页面上有个支付金额的表单
codecept_debug($payMoney);

拿到页面数据后你爱干嘛就是另一回事咯,但注意,你的JS代码如果使用了jQuery,那你要确保页面上已经加载了jQuery