验收测试 - WebDriver - 等待与暂停

  • 作者:KK

  • 发表日期:2015.12.13


  • $I->wait(10) 等待10秒,但是10秒后会恢复继续运行

  • $I->waitForElement('#tab2', 10) 等待一个特定元素出现时才继续运行,最多等待10秒,如果不传第二个参数(秒数)的就是永远等待,直到服务器不耐烦报timeout等错误为止...

  • $I->waitForElementChange('#count') 等等某个元素发生改变时才运行,或者下面这个小例子是等待一个菜单出现才继续运行

    $I->waitForElementChange('#menu', function(\WebDriverElement $element) {
    	return $element->isDisplayed();	//判断是否显示,之所以这样写是暗示你可以用$element做很多事情哦,自己研究吧~
    }, 1000);
    

    其中第3个参数是最大等待秒数,可以不传

  • $I->waitForElementVisible('#menu') 这也是等待一个元素直到它可以看见为止,是上面那个代码的便捷版

  • $I->waitForElementNotVisible('#menu') 这是相反,等待一个元素直到它不可见为止

  • $I->waitForJS('return winnerNums == 200;') 等待这条JS表达式为true时再执行,比如现在有个数据显示区实时显示胜出的人数,191,192,193...地慢慢增加,而且有个全局JS变旱winnerNums保存这个数据,在200之前不成立,则一直在等待,加到200后测试用例就会解除等待,继续往下跑了

  • $I->waitForText('你有一条新消息', 10, '#newMsgPannel') 等待特定的文本出现在页面上的#newMsgPannel元素里面,最多等待10秒,其中第2和第3个参数可以不传,只要指定文本即可,它会全局慢慢查,只是慢一点


暂停测试脚本

在涉及一些复杂的数据增删改然后你又在调试时这个比较有用,方法名pauseExecution

$I->click('#finishStep1');
$I->pauseExecution();	//点击添加后暂停一下,然后你可以自行到数据库查看些数据确认或者其它事情
$I->click('#next');
$I->fillField('...各种表单填充');
$I->click('#finishStep2');
$I->pauseExecution();	//又来..

但其实你可能会问:那跟我人工测试有啥区别?我自己也可以点一下链接看一下数据库再点下一个链接也是暂停继续暂停继续的操作呀

确实,一般情况下你自己都可以做到,要这种代码配合的不是很常有,但是这个代码是已经预先设定好了的流程,你人工操作的话可能会少一个流程,在一些OA系统,ERP系统,比较多商品和多支付模式的商品交易中你想想是不是你人工都记得住每一个流程的环节而不漏掉测试呢?但这时候电脑全部都记得,它只是慢慢运行,帮你一次次停下来,你只管根据它的测试流程去查数据做微调就好了