美文网首页
使用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