美文网首页
使用selenium实现web自动化测试常用点分享

使用selenium实现web自动化测试常用点分享

作者: 金融测试民工 | 来源:发表于2020-04-26 15:54 被阅读0次

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]"));

相关文章

网友评论

      本文标题:使用selenium实现web自动化测试常用点分享

      本文链接:https://www.haomeiwen.com/subject/dvqjwhtx.html