基于页面元素定位的操作失败自动截图

web自动化脚本运行失败,很大一部分问题出在元素定位上,博主在这里介绍一个循环定位及失败截图的方法。以方便脚本维护,定位问题。

1、以下代码是WebDriver自带的方法,封装一下,使用即可。

 1     /**
 2      * 截取屏幕截图并保存到指定路径
 3      *
 4      * @param filepath
 5      *            保存屏幕截图完整文件名称及路径
 6      * @return 无
 7      */
 8     public void captureScreenshot(String filepath) {
 9         File screenShotFile = ((TakesScreenshot) driver)
10                 .getScreenshotAs(OutputType.FILE);
11         try {
12             FileUtils.copyFile(screenShotFile, new File(filepath));
13         } catch (Exception e) {
14             e.printStackTrace();
15         }
16     }                    

2、截图公共方法,生成存放路径和文件名,打印失败信息

    /**
     * 截图公共方法,生成存放路径和文件名,打印失败信息
     *
     * @param isSucceed
     *            if your operation success
     */
    public void operationCheck(String methodName, boolean isSucceed)
            throws Exception {
        if (!isSucceed) {
            Date date = new Date();
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd HHmmss");
            String time = format.format(date);
            StringBuffer sb = new StringBuffer();
            String captureName = sb.append("./Captures/")
                    .append(methodName).append(time).append(".png").toString();
            captureScreenshot(captureName);
            System.out.println("method 【" + methodName + "】 运行失败,请查看截图快照:" + captureName);
        }
    }

3、在指定的超时时间内,循环定位页面元素,成功则随时返回true,超时时间内没有定位到元素,则执行截图方法,返回false

 1     /**
 2      * wait for the specified element appears with timeout setting.
 3      *
 4      * @param locator
 5      *            the element locator on the page
 6      * @param timeout
 7      *            超时时间,单位:秒
 8      */
 9     public boolean isElementPresent(By locator, long timeout) throws Exception {
10         boolean isSucceed = false;
11         long timeBegins = System.currentTimeMillis();
12         do {
13             try {
14                 driver.findElement(locator);
15                 isSucceed = true;
16                 break;
17             } catch (Exception e) {
18                 e.printStackTrace();
19             }
20
21         } while (System.currentTimeMillis() - timeBegins <= timeout * 1000);
22
23         operationCheck("isElementPresent", isSucceed);
24         return isSucceed;
25     }

4、定位页面元素公共方法,每次定位元素都调用isElementPresent方法。解决元素未加载完成就点击的问题。

 1     /**
 2      * 定位页面元素,超时时间内反复判断元素是否出现。若元素定位失败,则截图
 3      *
 4      * @param by
 5      *            页面元素
 6      * @param timeout
 7      *            超时时间
 8      * @return 页面元素
 9      */
10     public WebElement getElement(By by, long timeout) {
11         try {
12             if (opr.isElementPresent(by, timeout)) {
13                 return driver.findElement(by);
14             }
15         } catch (Exception e) {
16             System.out.println(e + "");
17         }
18         return null;
19     }

5、默认超时时间5秒,脚本使用时直接调用getElement(By by)即可

 1     /**
 2      * 定位页面元素,超时时间内反复判断元素是否出现。若元素定位失败,则截图
 3      *
 4      * @param obj
 5      *            父对象
 6      *
 7      * @param by
 8      *            页面元素
 9      * @param timeout
10      *            超时时间
11      * @return 页面元素
12      */
13     public WebElement getElement(By by) {
14         return getElement(by, 5);
15     }
时间: 2024-11-08 10:17:05

基于页面元素定位的操作失败自动截图的相关文章

页面元素定位及操作--xpath

简介: 在 XPath 中,有七种类型的节点:元素.属性.文本.命名空间.处理指令.注释以及文档(根)节点.XML 文档是被作为节点树来对待的.树的根被称为文档节点或者根节点. /xxx 页面输出 /xxx/yyy 默认返回第一个输入框 使用下标方式进行查找 //xxx  (也可以使用下标方式查找) 有问题(第三个input找不到)  结合绝对路径查找 //xxx/yyy   . //xxx[@id] //xxx[@id=yyy] ================================

java selenium webdriver实战 页面元素定位

自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选择下拉列表中的那个下拉列表或者输入框中输入什么值 其中定位页面元素是三步骤的第一步,本篇介绍常用的定位方法 webDriver对象的findElement函数用于定位一个页面元素,findElements函数用户定位多个页面元素,定位的页面元素使用webElement对象进行存储 常用的方法有: 1

Robot Framework 教程 (2) - 页面元素定位

上一篇文章中,简单模拟了一个baidu搜索并截图的过程,在搜索过程中,我们需要对搜索框.搜索按钮进行定位.本篇文章主要介绍一下具体的定位方法. 我们的脚本如下: *** Settings *** Library Selenium2Library *** Test Cases *** firefox兼容性 Open Browser https://www.baidu.com/ ff Input Text id=kw LeetTest Click button id=su Sleep 2 Captu

【selenium学习笔记】webdriver进行页面元素定位

[selenium学习笔记]webdriver进行页面元素定位 进行Web页面自动化测试,对页面上的元素进行定位和操作是核心.而操作又是以定位为前提的,因此,对页面元素的定位是进行自动化测试的基础. 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver就是利用元素的这些属性来进行定位的. 可以用于定位的常用的元素属性: id name class name tag name link text partial link te

UI自动化页面元素定位

做ui自动化的最基础的就是页面元素定位了,如果连页面元素都定位不到,自动化从何谈起呢?接下来我们就看看页面元素定位的方法吧!(这里就用百度页面来进行演示) 一.最通用的几种定位方式: 1.通过id定位 1 driver.find_element_by_id('su') 2.通过name定位 driver.find_element_by_name('mp') 3.通过class属性 driver.find_element_by_class_name('s_ipt') 4.通过文本链接 driver

【前端经纬】将页面元素定位

最近在做公司的项目的手,遇到了要是 html页面元素定位的问题. 查阅了相关资料,这里 Mark.  1)可以使用 css的position属性实现该功能. 2)代码实现如下(可以运行 http://www.w3school.com.cn/tiy/t.asp?f=csse_position_absolute): <html> <head> <style type="text/css"> h2.pos_abs { position:absolute;

Python3.x:Selenium中的webdriver进行页面元素定位

Python3.x:Selenium中的webdriver进行页面元素定位 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver就是利用元素的这些属性来进行定位的. 可以用于定位的常用的元素属性: id name class name tag name link text partial link text xpath css selector 对应于webdriver中的定位一个元素方法分别是: driver.find_e

Selenium2+python自动化67-用例失败自动截图【转载】

前言: 装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数 上一篇讲到用装饰器解决异常后自动截图,不过并没有与unittest结合,这篇把截图的装饰器改良了下,可以实现用例执行失败自动截图. 一.不带变量的装饰器 1.参考资料:http://www.artima.com/weblogs/viewpost.jsp?thread=240845,这里这篇讲的很好,可以看下原文 2.这个是不带变量的装饰器__init__里是初始化参数,__call__里面是原函数参数 Decorators

Selenium with Python 003 - 页面元素定位

WebUI自动化,首先需要定位页面中待操作的元素,然后进行各种事件操作,这里我们首先介绍Selenium Python 如何定位页面元素,WebDriver 提供了一系列的方法. 定位单个页面元素(返回单个元素对象) find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_element_by_tag