Selenium IDE工具总结Word格式.docx
《Selenium IDE工具总结Word格式.docx》由会员分享,可在线阅读,更多相关《Selenium IDE工具总结Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
css=input[type=submit]"
);
//此句对应上面的句一
$this->
//此句和下一句,对应上面的句二
waitForPageToLoad("
30000"
区别在于:
clickAndWait后会有一个默认的页面等待时间为30秒;
而click没有等待时间;
Andwait这个后缀,告诉我们,该命令将使浏览器向服务器产生一个请求,使
Selenium等待加载一个新的页面。
辅助accessors:
这是辅助工具。
用于检查应用程序的状态并将结果存储到变量中。
如:
storeElementPresent(locator,variableName)
其中参数:
locator表示元素定位器;
variableName用于存储结果的变量名。
即将locator定位到的状态存储到variableName变量中。
如果该元素出现返回true,否则返回false
可同断言一同使用。
断言assertion:
验证应用程序的状态是否同所期望的一致。
常见的断言包括:
验证页面内容,如标题是否为X或当前位置是否正确,或是验证该
复选框是否被勾选。
断言被用于三种模式:
assert、verify、waitfor
Assert失败时,该测试将终止。
Verify失败时,该测试将继续执行,并将错误记入日显示屏。
也就是说允许此单个
验证通过。
确保应用程序在正确的页面上。
Waitfor用于等待某些条件变为真。
可用于AJAX应用程序的测试。
如果该条件为真,他们将立即成功执行。
如果该条件不为真,则将失败并暂停测试。
直到超过当前所设定的超时时间。
一般跟setTimeout时间一起用
断言常用的有:
assertLocation(判断当前是在正确的页面)、
assertTitle(检查当前页面的title是否正确)、
assertValue(检查input的值,checkbox或radio,有值为”on”无为”off"
)、
assertSelected(检查select的下拉菜单中选中是否正确)、
assertSelectedOptions(检查下拉菜单中的选项的是否正确)、
assertText(检查指定元素的文本)、
assertTextPresent(检查在当前给用户显示的页面上是否有出现指定的文本)、assertTextNotPresent(检查在当前给用户显示的页面上是否没有出现指定的文本)、assertAttribute(检查当前指定元素的属性的值)、
assertTable(检查table里的某个cell中的值)、
assertEditable(检查指定的input是否可以编辑)、
assertNotEditable(检查指定的input是否不可以编辑)、
assertAlert(检查是否有产生带指定message的alert对话框)
waitForElementPresent(等待检验某元素的存在。
为真时,则执行。
)
具体实现中出现的问题:
将录制的脚本转成PHPUNIT在服务器端运行总失败。
开始要作如下工作:
1.在setUp()函数中添加语句:
每次脚本运行,都将清空数据库的语句
`/home/www/selenium-php/yuezhan/rebuilddb.sh`;
注意:
用倒斜杠,数字1左边的键
//根据项目需要而修改;
2.将默认的浏览器代码修改:
将$this->
setBrowser("
*chrome"
改成$this->
*firefox"
可以不用修改代码的方法:
Selenium工具OptionsOptions选择Formats选项卡
选择PHP-PHPUNIT将Environment里的浏览器改成firefox即可,
这样子录制的脚本转化成PHP后,也就不用修改此部分代码了。
3.在第2点的基础上,在上面添加两句代码:
setHost("
192.168.8.24"
setPort(4445);
//此句可以不加,根据自己服务器端口而定
4.录制的脚本中如有上传图片的路径。
也要根据服务器所在的环境作修改。
如在同一环境下可不作修改。
不在同一环境下,要将图片路径修改成服务器环境中图片所在的路径下。
5.录制的脚本一定要从登录开始录制。
在没有解决COOIKE之前,必须这么做。
运行脚本时,
常见问题1:
报错:
ERROR:
TherewasanunexpectedAlert!
[ajax错误].
错误原因:
AJAX错误,没有找到ALERT提示的框架,因而报异常错误
解决方法一:
这是一个“下一步”按钮。
进入的页面中,有AJAX。
可以此句前面添加:
setSpeed(1000)让其执行速度变慢1秒。
具体php代码:
setSpeed("
1000"
)//从下一句开始,执行速度放慢
$this->
type("
name=player[player1][name]"
"
元一"
0"
)//恢复到正常执行速度
根本的解决方法:
$this->
waitForCondition("
selenium.browserbot.getUserWindow().jQuery.active==0"
3000"
//此处3000,即限定的超时时间timeout。
解释waitForCondition用法:
waitForCondition(JavaScriptSnippet,time)
-在限定时间内,等待一段JavaScript代码返回true值,超时则停止等待
其中"
这是一段javascript语句,
意思:
检查得到的窗体里AJAX的活动数量为0时,则为0即无AJAX活动了,则为真,为真就可以继续向下运行。
反之,在限定的timeout3秒时间内,活动数仍不为0,则会报错。
常见的框架:
jQuery:
“jQuery.active”
Prototype:
“Ajax.activeRequestCount”
Dojo:
“dojo.io.XMLHTTPTransport.inFlight.length
我们用的是jQuery框架,即写成jQuery.actiive
3000是限时3秒。
不正确的解决方法:
for($second=0;
;
$second++){
if($second>
=60)$this->
fail("
timeout"
try{
if($this->
isElementPresent("
))break;
}catch(Exception$e){}
sleep
(1);
}
此处用的方法:
waitForElementPresent(locator,variableName)验证指定元素在页面上。
此方法解决AJAX错误时无效。
其检验元素的方法,可解决javascript的问题。
常见问题4中会详解。
常见问题2:
服务器连接不上。
解决方法:
目前我们服务器上同时只能边接两台机器。
所以,这儿的解决方法,只能限于两台哦。
常见问题3:
超时timeout
在服务器上跑,页面加载时间有时会变的慢
页面加载时间修改一下。
延长页面加载时间
原语句:
可更改为:
60000"
解决方法二:
将运行速度放慢,在页面加载时间前一句加如下语句
)//运行速度放慢
当然,页面加载完之后,可以提交接钮语句之后,加如下语句,将运行速度恢复到正常。
)//恢复到正常执行速度
常见问题4:
登录时,没有发现某个元素。
[error]Elementid=usernamenotfound
如,我们虎扑网站,当前状态为未登录。
先点击进入论坛页面。
然后点击“登录”,
录制的脚本,在回放中,会错误。
没有该元素。
例如录制脚本:
ComandTargetValue
open/
clicklink=登录
typeid=usernameadmin
typeid=passwordadmin
………………
clickAndWaitlink=退出
open("
/"
link=登录"
id=username"
admin"
id=password"
…………
link=退出"
回放时,到了用户名那一句,就会报无法找到元素的错误。
登录时,会弹跳出一个登录对话框。
此对话框即是Javascript语句写的。
用waitForElementPresent方法,其方法是检查页面上的元素是否存在。
登录之后的语句,都是JAVASCRIPT语句执行之后出现的。
建议检验最后一个可输入元素。
waitForElementPresentid=password//此句为添加的辅助代码,检查元素
typeid=usernameadminuser
typeid=passwordadminpwd
for($second=0;
//超过60秒,则报超时错误
if($this->
//检查用户名这个元素
adminuser"
adminpwd"
上述中selenium中的waitForElementPresentid=password这一句,转化成PHPUNIT代码后,即是for循环代码那一段。
在PHPUNIT中也可以直接添加该段代码。
且完全可以将for循环代码这一段替换成:
waitForElementPresent("
这样单独的一句。
完全可以只写这一句,也可以达到检查这个元素的效果。
解释waitForElementPresent用法:
waitForElementPresent(locator)等待指定元素出现在页面上。
常见问题5:
录制时必须从登录开始录制,那么有没有什么办法可以解决呢。
如下PHPUNIT代码:
<
?
php
`/home/www/selenium-php/yuezhan/rebuilddb.sh`;
//数据库初始化
classHCYZ_LoginTestextendsPHPUnit_Extensions_SeleniumTestCase
{
privatestatic$YZLoginCookie;
//定义了一个私有的静态变量,变量名为YZLoginCookie
protectedfunctionsetUp()
{
setBrowserUrl("
http:
//kangying.yuezhanerqi.test.hc.sf/"
publicfunctiontestLogin()//这个类就是测试登录。
backend_test.php/om_match"
//打开后台URL
name=backend_user[username]"
康莹"
name=backend_user[password]"
kangying"
css=input.button"
self:
:
$YZLoginCookie=$this->
getCookieByName("
symfony"
//下面详细解释。
publicfunctiontestOmMatch()//这个类就是测试约战二期的。
//要注意这儿要先打开约战二期的URL
createCookie("
symfony="
.self:
$YZLoginCookie,"
path=/"
//下面详细解释
//注意,创建完COOKIE要再打开下URL
}
解释下面两句:
1.self:
Symfony这个参数是SESSION名。
getCookieByName这是一个取得Cookie值的方法。
并将取的到值放到YZLoginCookie变量中。
因为YZLoginCookie变量是私有的。
在PHPUNIT中,私有变量的引用就这么写:
self:
$变量名
这个我们不要太懂。
就记住,定义变量时用的是private,那么用这个变量时,前面加
Self:
(注意:
这儿的两个冒号,必须是半角状态下的冒号)就可以了。
2.$this->
createCookie()这个就是创建Cookie的方法
它的参数是刚刚self:
$YZLoginCookie变量中的值。
将其创建好的Cookie存放到path=/这个路径下
常见问题6:
运行PHPUNIT代码时报类似如下错:
Failedassertingthat<
boolean:
false>
istrue.错误原因:
此处错误存在于断言检查中。
检查出来返回的值是失败的。
1.检查断言语句是没有放错位置。
应将语句放置要检查代码的上一行
2.主要检查引号中里面的语句有无错误。
比如:
必须填写"
这里面与页面中有出入。
应为
必需填写"
再比如:
css=input[typ=button"
这里应该为:
css=input[type=button]"
少了右边的中括号,还有type的e
先看有没有少写了括号或中括号;
再来检查单词有无编写错误。
以及有无错别字的错误。
常见问题7:
Parseerror:
syntaxerror,unexpectedT_IFin/home/www/selenium-php/zhaomu.phponline44
第44行。
提示有代码错误。
检查第44行以及44附近的行。
先看有没有少写了分号;
然后看编写或复制代码时,有无加了代码行的编号(即代码前的数字);
最后检查单词有无编写错误。
常见问题8:
运行PHPUNIT代码时报类似如下错:
PHPUnit_Framework_Exception:
ResponsefromSeleniumRCserverfortestComplete().
Therewerenoalerts.
PHPUNIT中框架异常出错。
它找的错误原因,没有Alert。
这里alert是一个提示信息,一般出现在当前窗体中以弹层方式显示的确认对话框。
在确认对话框提示代码的上一行,添加一段等待审核提示信息即可。
方法一、可以直接在selenium中,在弹出提示框代码的上一行。
open/backend_test.php/om_match
clicklink=招募
………………
clickcss=input[type=button]
waitForAlertPresent//此句添加断言,等待警告/提示框
assertAlert请等待信息审核
保存,转成PHPUNIT后代码为:
/backend_test.php/om_match"
link=招募"
……………………
for($second=0;
isAlertPresent())break;
//检查Alert警告/提示框
assertEquals("
请等待信息审核"
$this->
getAlert());
上述中selenium中的waitForAlertPresent这一句,转化成PHPUNIT代码后,即是for循环代码那一段。
方法二、在PHPUNIT中也可以直接添加该段代码。
waitForAlertPresent();
这样单独的一句。
***注意:
参数为空
解释waitForAlertPresent用法:
waitForAlertPresent()等待警告/提示出现。
注意,参数为空
如何在自动化测试中生成代码覆盖报告?
在PHPUNIT测代码中加入如下两个语句:
protected$coverageScriptUrl='
和$this->
/phpunit_coverage.php?
PHPUNIT_SELENIUM_TEST_ID=yz"
将代码加哪到呢?
如下例子:
如我录制好代码,转换成phpunit代码。
命名为liangle-ccov.php
现在我们为liangle-ccov.php添加完测试代码之后为:
<
classExampleextendsPHPUnit_Extensions_SeleniumTestCase
protected$coverageScriptUrl='
//加入第一句,下面会详细解释。
protectedfunctionsetUp()
setBr