如何组建高效的开源测试框架之getElement-创新互联

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

创新互联专注于崇明企业网站建设,响应式网站设计,商城网站定制开发。崇明网站建设公司,为崇明等地区提供建站服务。全流程专业公司,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

    之前有记录了关于怎样搭建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)可扩展性更强

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


标题名称:如何组建高效的开源测试框架之getElement-创新互联
链接地址:http://ybzwz.com/article/dhipee.html