Seleium实践问题采坑记录
-
定位元素
-
用到的3种方式,id、classname、xpath定位
i. classname,获取driver.findElements(className("xxxx"))
ii. id 获取 driver.findElement(By.id("xxxx"))
iii.xpath 定位 driver.findElement(By.xpath("")),距离xpath如何获取,以百度为例:

-
-
判断元素是否存在
-
如果ui自动化的页面,会碰到部分阻碍用例执行的非必现弹窗或者其他的操作,需要代码判断是否存在,如果存在,操作关闭。以便执行下一步
代码如下:
/** * 判断某个元素是否存在 */ public static boolean isJudgingElement(WebDriver webDriver, By by) { try { webDriver.findElement(by); return true; } catch (Exception e) { System.out.println("不存在此元素"); return false; } } ```
-
-
判断页面元素是否可点击
- 由于ui自动化会一直执行,数据不能每次都提前造好。所以有些点击的操作,可以不能真的发起操作,但需要验证是否可点击,seleium中有自带的方法,本次用的
ExpectedConditions.elementToBeClickable -
接入钉钉消息
-
接入钉钉消息,有官方文档,需要生成钉钉机器人,这里引用钉钉的官方文档。 需要注意如果选了自定义关键词,那最终的需要包含关键词,否则会报错哦~

-
-
本地获取远程文件的解决方案
- 本地获取远程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()); -
通过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(); } -