十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
好长一段时间没有写技术博客了,浑浑噩噩的过了这么多日子,一直处于瞎忙的状态,荒废了好多时光。今天静下来想想,继续上路。
创新互联专注于崇明企业网站建设,响应式网站设计,商城网站定制开发。崇明网站建设公司,为崇明等地区提供建站服务。全流程专业公司,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务之前有记录了关于怎样搭建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许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。