温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何组建高效的开源测试框架之getElement

发布时间:2020-07-08 06:00:06 来源:网络 阅读:442 作者:AnthonyGao1105 栏目:软件技术

    好长一段时间没有写技术博客了,浑浑噩噩的过了这么多日子,一直处于瞎忙的状态,荒废了好多时光。今天静下来想想,继续上路。


    之前有记录了关于怎样搭建webdriver的测试环境,也记录了一些小技巧,也给出实例怎样真正开始动手写一个自动化测试的case.但是真正的自动化测试项目中,只会那些还是远远不够的,细想一下,如果每一个步骤要有driver.findElement只论可读性的话就该够你喝一壶的了,更别谈维护了。这时脑子上灯突然闪了下,貌似你好像有了些灵感,那些重复的语句,可以封装吗?那么我们就先从findElement的方法开始我们的框架设计之旅。

    我们首先来看看原生的webdriver找元素的方法,以id为例: driver.findElement(By.id(" ")),暂时抛开driver, findElement方法中包含了2个部分By 和id(元素的属性)By是原生的关键字,这里我们也先不动它,我们先从id入手,其实不光id,有很多通过元素属性找元素的方法,比如: id,name,cssSelector,xpath,linkText,tagName等等等。。

这里我们就可以做文章了,比如我们实例化一个By locator 的方法,把有可能用到的元素属性都列在里面,根据用户提供的元素属性的不同调用不同的方法,元素属性包含2个部分:属性名称,属性value中间可用‘:’隔开。

1. 如果用户的输入没有‘:’,那么默认调用By.id()方法

2. 如果用户的输入包含':',那么根据实际情况来判断,通过‘:’把元素用户输入分开,通过':'左边分离出来的字符串来判断具体的调用方法。通过‘:’右边分离出来的字符串来传入实际的属性value


public static By locator(String locator) {

if (!locator.contains(":")) {

return By.id(locator);

} else {

String[] lArr = locator.split(":");

String by = lArr[0];

                        //取到冒号后面的具体的元素属性

String using =locator.substring(by.length()+1);

if (by.equalsIgnoreCase("id")) {

return By.id(using);

} else if (by.equalsIgnoreCase("name")) {

return By.name(using);

} else if (by.equalsIgnoreCase("xpath")) {

return By.xpath(using);

} else if (by.equalsIgnoreCase("cssSelector")) {

return By.cssSelector(using);

} else if (by.equalsIgnoreCase("linkText")) {

return By.linkText(using);

} else if (by.equalsIgnoreCase("partialLinkText")) {

return By.partialLinkText(using);

} else if (by.equalsIgnoreCase("tagName")) {

return By.tagName(using);

} else if (by.equalsIgnoreCase("className")) {

return By.className(using);

} else {

         

throw new IllegalArgumentException("Cannot find elements when name text is null.");

}

}

}

3. 定义一个getEelment的方法

public static WebElement getWebElement(String locator) {

WebElement we;

                    we = driver.findElement(locator(locator));

return we;

            }

这样找元素的方法就简单的完成了,但是这么做有什么好处呢?

a) 不用过分关心底层找元素的方法,我只要提供对元素的属性就可以了,可以是id,name....

b) 重用了findElement方法,不用写很多次,只定义一次,无限次调用

c) 维护更容易,不用频繁的该代码,出错了只要改很少的地方,实现了属性和方法的分离

d)可扩展性更强

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI