验收测试 - 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