涉及
1、ajax在IDE上的应用
2、javascript在IDE上的应用
3、如何保存页面上的元素
4、导出RC后根据具体需求做扩展。
5、webreading翻页的判断
6、通过firebug等工具定位ID,取得有用的元素
一:应用IDE做基础脚本的准备
1、录制open,翻页,然后回放。哦 ,错了!
问题:回放出错
原因:查找资料后,发现因为webreader这个页面的显示是ajax,是局部刷新的,在页面的target还没有完全加载完毕时候,click自然找不到
解决办法:waitForElementPresent,等待某个target出现
2、翻页怎么翻到最后一页
设想:取到总页数,然后导出rc后,做for循环
操作:取总页数,存起来,在页面上的总页数那边右键,选择storeText,就存好了,可以添加echo来打印看看是不是存成功了。后续在RC中处理下转为int型
3、如何判断页面加载成功失败
通过firebug查看html的内容,分析加载失败的页面和加载成功页面,加载中页面,三种状态html元素的不同。
总结得:
- 加载完毕且成功的页面,id=MainFrame_ViewContainer_BG_1的src的字符串里面有个以PageBGImgHandler开头的图片字符串流。
- 加载完毕且失败的页面,会存在id=MainFrame_ViewContainer_Wrap_1_fail的元素,它的src的是url+images/imgFailed.png;
- 加载中的页面id=MainFrame_ViewContainer_BG_1的src的字符串一直未被修改,为原始的 rc="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
4、根据上面分析我们需要得到id=MainFrame_ViewContainer_BG_1的src的字符串。
查阅资料实验,可以通过javascript来取到
javascript{this.browserbot.getUserWindow().document.getElementById("MainFrame_ViewContainer_BG_1").src}
用echo打印出来到log下看看是不是我们想要的。验证是我们需要的。
以上IDE中的基础脚本准备结束。将case导出为Junit4RC。放入Eclipse Maven工程中。
二:在RC中根据需求进行扩展。
1、有时候比较麻烦的流程时候可以在本子上大概画出流程图。整理如下
2、建议在case中最好将一些函数在@test外部封装下,然后再在具体的执行case中应用。
根据流程图,编写以上的代码
public int getPageLoadStatus(int pageIndex,int seconds){
int elementPresent=0;
boolean failElementPresent=false;
for(int second=0;;second++){
if(second>seconds){
elementPresent=0;
return elementPresent;
}
try{
String src_bg = selenium.getEval("this.browserbot.getUserWindow().document.getElementById(\"MainFrame_ViewContainer_BG_"+pageIndex+"\").src");
src_bg=src_bg.substring(60, 76);
failElementPresent=selenium.isElementPresent("MainFrame_ViewContainer_Wrap_"+pageIndex+"_fail");
System.out.println(src_bg);
if(src_bg.endsWith(new String("PageBGImgHandler"))){
elementPresent=1;
return elementPresent;
}
else if(failElementPresent){
elementPresent=2;
return elementPresent;
}
}catch(Exception e){
;
}
pause(1000);
}
}
3、在执行case中调用。
String totalPages = selenium.getText("id=totalPages");
System.out.println(totalPages);
totalPages=totalPages.substring(2);
System.out.println(totalPages);
int totalPages_int=Integer.parseInt(totalPages);
FileOutputStream FileOS=new FileOutputStream(new File("e:\\log.txt"),true);
for(int pageIndex=0;pageIndex<totalPages_int;pageIndex++){
int pageStatus=getPageLoadStatus(pageIndex,1);
verifyEquals(1, pageStatus);
selenium.click("id=cm_next_page");
//保存每一页的状态。
switch(pageStatus)
{
case 0:
FileOS.write(("pageIndex "+pageIndex+" is always loading in the limit time!\r\n").getBytes());
break;
case 1:
FileOS.write(("pageIndex "+pageIndex+" is loaded success in the limit time!\r\n").getBytes());
break;
case 2:
FileOS.write(("pageIndex "+pageIndex+" is loaded fail in the limit time!\r\n").getBytes());
break;
default:
FileOS.write(("pageIndex "+pageIndex+" is not get the status!\r\n").getBytes());
}
4、整理下代码,注释的注释,封装的封装。
三、放在Jenkins上验证执行。
后续根据需要优化,把能参数化的地方提取出来用变量管理