1、如何定位相同name的元素
<TR class=td_3>
<TD class=td_3><INPUT type=hidden value=Aname=selectLevelCode> A </TD>
<TD class=td_3>正式录入员 </TD>
<TD class=td_3><INPUT value=50 name=selectSpeed> </TD>
<TD class=td_3><INPUT value=100name=selectCorrectRate> </TD>
</TR>
<TR class=td_3>
<TD class=td_3><INPUT type=hidden value=Bname=selectLevelCode> B </TD>
<TD class=td_3>临时录入员 </TD>
<TD class=td_3><INPUT value=20 name=selectSpeed></TD>
<TD class=td_3><INPUT value=56.00name=selectCorrectRate> </TD>
</TR>
采用计数来定位(编号从1开始而不是0):
selenium.type("//descendant::input[@name='selectCorrectRate'][1]","55"); 定位第1个selectCorrectRate
selenium.type("//descendant::input[@name='selectCorrectRate'][1]","55"); 定位第2个selectCorrectRate
或者间接定位:
selenium.type("//td[contains(text(),'正式录入员 ')]/parent::*/td/input[@name='selectCorrectRate']","58.00");定位第1个
selenium.type("//td[contains(text(),'临时录入员 ')]/parent::*/td/input[@name='selectCorrectRate']","58.00");定位第2个
或者写为
selenium.type("//td[contains(text(),'正式录入员 ')]/..//td/input[@name='selectCorrectRate']","58.00");定位第1个
selenium.type("//td[contains(text(),'临时录入员 ')]/..//td/input[@name='selectCorrectRate']","58.00");定位第2个
2、如何得到1中的那段脚本,我们可以使用Object Spy工具捕获。Object SPY是一款探测器工具,使用它可以轻松的探测到网页或者C/S对象空间的属性。
3、点了页面“保存”弹出的confirm或alert框,不需要getConfirmation或getAlert去获取,会自己确认。
selenium.click("//input[@value='保 存']");
4、TAB键:\t
回车键:\n
Pagedown \34
webTest.keyPress("//input[@value='保 存']", "\t");
webTest.keyPress("//input[@value='保 存']", "\n");
webTest.keyPress("//input[@value='保 存']", "\34");
5、当click不起作用的时候,可以尝试使用回车键
webTest.click("link=业务模版设置");
//webTest.click("//A[contains(text(),'超时预警参数设置')]");使用click不成功
webTest.keyPress("//A[contains(text(),'超时预警参数设置')]","\n");//成功
6、即使web页面当前展示的元素是唯一的,元素也可能不被识别,因为该元素所在的jsp文件内可能存在多个相同标识的元素,而webdriver识别是以jsp为准的。
7、在type=file框里面输入文本,需要先click,再type,只type是不行的。
webTest.click("//input[@name='file']");
webTest.type("//input[@name='file']","D:\\InterfaceTest\\wangxuhui276\\workspace\\doswebdriver\\lib\\config\\error.txt");
8、构造某长度String
String overflowStr = "1";
for(;;)
{
overflowStr = overflowStr+"1";
if(overflowStr.length()>60) break;
}
9、选择了当前frame后,可以继续直接选择它的子frame。若要选择它同级的frame,则需要回到顶层frame后,再进行选择
A
B C
webTest. selectFrame("B");
webTest. selectFrame("relative=top");
webTest. selectFrame("C");
10、选择表格指定某一行的特定连接
webTest.keyPress("//descendant::td[contains(text(),'webTest')][1]/../td[5]/A","\n");
10、得到表格里面的cell值,注意:行列的索引从0开始
webTest.getTable("//table[@id='ruleField'].1.1")//得到第2行第2列的值
或者采取迂回的方式得到table
webTest.getTable("//td[contains(text(),'查看影像')]/../../.1.0")
11、对于可能抛出异常的命令,采用如下格式封装,其实就是循环执行该命令,直到成功或60秒超时为止。
int cnt60sec= 0;
while(true)
{
assertTrue(cnt60sec<=30);
try
{
webTest.selectWindow("DRS数据统筹系统");
}
catch(Exceptione)
{
Thread.sleep(2000);
cnt60sec++;
continue;
}
break;
}
对于文本是否显示,60秒超时判断如下:
intcnt60sec = 0;
while(true)
{
assertTrue(cnt60sec<=30);
try
{
if(webTest.isTextPresent("操作成功"))
break;
else
{
Thread.sleep(2000);
cnt60sec++;
continue;
}
}
catch(Exception e)
{
Thread.sleep(2000);
cnt60sec++;
continue;
}
}
//断言60秒
int cnt60sec = 0;
while(true)
{
assertTrue(cnt60sec<=30);
try
{
assertEquals(value0001,webTest.getValue(locator0001));
}
catch(Exception e)
{
Thread.sleep(2000);
cnt60sec++;
continue;
}
break;
}
12、判断子窗口是否弹出
intcnt60sec = 0;
while(true)
{
assertTrue(cnt60sec<=30);
try
{
String[]wnds = webTest.getAllWindowTitles();
if(wnds.length>=2)//弹出则总共有两个窗口,主窗口和子窗口,若要判断子窗口是否关闭,则判断wnds.length<=1
break;
else
{
Thread.sleep(2000);
cnt60sec++;
continue;
}
}
catch(Exception e)
{
Thread.sleep(2000);
cnt60sec++;
continue;
}
}
13、文件下载
webTest.fileDownload("文件下载", "另存为", "D:\\InterfaceTest\\wangxuhui276\\workspace\\doswebdriver\\lib\\config\\exportrule.csv");
assertTrue(fileExist("D:\\InterfaceTest\\wangxuhui276\\workspace\\doswebdriver\\lib\\config\\exportrule.csv"));
publicbooleanfileExist(String file_path)throwsIOException {
Filefile =newFile(file_path);
if(!file.exists()) {
returnfalse;
}else{
returntrue;
}
}
14、textarea内容清空
webTest.driver.findElement(By.xpath("//textarea[@name='problemDesc']")).clear();
15、获取开始和结束时间
Date startDate=newDate(System.currentTimeMillis()-1000*60*60*24*3);//三天前
DateendDate=newDate(System.currentTimeMillis()+1000*60*60*24*3);//三天后
DateFormatdf =newSimpleDateFormat("yyyy-MM-dd"); // 如果需要小时、分钟和秒则用字符串"yyyy-MM-ddHH:mm:ss"
StringstartTime = df.format(startDate);
StringendTime = df.format(endDate);
webTest.type("//input[@name='startTime']", startTime);//查询起始时间
webTest.type("//input[@name='endTime']", endTime);//查询截至时间
16、设置命令超时时间
webTest.initialize(loginUrl,null, 0,null);
webTest.setTimeout("120000");
webTest.open(loginUrl);
17、断言表格元素
assertEquals("06",helper.waitValue(webTest, "getText",new String[]{"//input[@value='webTest']/../../td[2]"}));
assertEquals("Y",webTest.getText("//input[@value='webTest']/../../td[3]"));
assertEquals("启用",webTest.getText("//input[@value='webTest']/../../td[4]/select/option[@selected]"));
assertEquals("否",webTest.getText("//input[@value='webTest']/../../td[5]/select/option[@selected]"));
assertEquals("否",webTest.getText("//input[@value='webTest']/../../td[6]/select/option[@selected]"));
网友评论