菜鸟的Seleium踩坑记录

997 阅读2分钟

Seleium实践问题采坑记录

  1. 定位元素

    • 用到的3种方式,id、classname、xpath定位

      i. classname,获取driver.findElements(className("xxxx"))

      ii. id 获取 driver.findElement(By.id("xxxx"))

      iii.xpath 定位 driver.findElement(By.xpath("")),距离xpath如何获取,以百度为例:

  2. 判断元素是否存在

    • 如果ui自动化的页面,会碰到部分阻碍用例执行的非必现弹窗或者其他的操作,需要代码判断是否存在,如果存在,操作关闭。以便执行下一步

      代码如下:

              
          /**
           * 判断某个元素是否存在
           */
          public static boolean isJudgingElement(WebDriver webDriver, By by) {
              try {
                  webDriver.findElement(by);
                  return true;
              } catch (Exception e) {
                  System.out.println("不存在此元素");
                  return false;
              }
          }
          ```
      
  3. 判断页面元素是否可点击

    • 由于ui自动化会一直执行,数据不能每次都提前造好。所以有些点击的操作,可以不能真的发起操作,但需要验证是否可点击,seleium中有自带的方法,本次用的
      ExpectedConditions.elementToBeClickable
    
  4. 接入钉钉消息

    • 接入钉钉消息,有官方文档,需要生成钉钉机器人,这里引用钉钉的官方文档。 需要注意如果选了自定义关键词,那最终的需要包含关键词,否则会报错哦~

      官方

  5. 本地获取远程文件的解决方案

    • 本地获取远程html的代码,虽然未解决最终问题,但是巩固了下怎么读取文件的操作
    
         URL url = new URL("http://www.baidu.com");
        InputStream is=url.openStream();
        InputStreamReader isr = new InputStreamReader(is, "utf-8");
        BufferedReader br = new BufferedReader(isr);
        StringBuilder sb = new StringBuilder();
        String data = br.readLine();
        while (data != null) {//循环读取数据
            sb.append(data);
            data = br.readLine();
        }
        br.close(); //关闭文件
        isr.close();
        is.close();
        System.out.println(sb.toString());
        /**
        *jsoup解析html
        */
        Document doc =Jsoup.parse(sb.toString());
        
    
  6. 通过markdown形式发送testng报告。获取失败条数踩坑

    • 背景:testng报告中自身有失败用例条数的返回,需要获取这个值,之前考虑是用生成的html文件通过jsoup来解析文件,本地读取文件解析发送都可以,在服务器上会提示无此文件,一开始以为目录问题,最后才想到workspace是在执行完用例文件。由于发送钉钉通知在测试类里。根据testng运行的特性,在解析文件时,文件还未生成,所以这种方式不能行的空。不过还是总结一些怎么解析html的

    • 最终解决方案,是在testng的listenr中重写了onFinish的方法,在方法中获取用例结果数以及发送钉钉消息。部分代码如下

        int passCount = context.getPassedTests().size();
        int failCount = context.getFailedTests().size();
        int skipCount = context.getSkippedTests().size();
        
        DingTalkClient client =  new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?access_token=xxxx");
    
        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype("markdown");
    
        OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
        markdown.setTitle("xxxx");
        markdown.setText("**Passed:" +passCount+ "**failed:" +failCount+");
    
        request.setMarkdown(markdown);
        try {
            OapiRobotSendResponse response = client.execute(request);
            System.out.println(response);
        } catch (
                ApiException e) {
            e.printStackTrace();
        }