19-元素管理方式及解析
1.通过构建getElement,读取yaml文件,定位元素
目标通过代码WebElement element=l.getElement("baidu_input");,可以读取yaml文件中的"baidu_input"。
(1)编写管理元素的yaml文件内容
- baidu_input后面接上":",直接回车,然后空两格
- type与value这两个key是固定的,后面接上“:”,然后空一格,也可以不空,如果value后面是xpath,建议加上引号
- 在webDriver中,有By.id,By.name,By.xpath,By.className,By.linkText等,我们选取这几种常见的,所以type的冒号后面可用的值为id,name,xpath
- value的值为type中对应的类型的值,比如百度首页上的输入框的id='kw'
(2)加载yaml文件
(3)编写By对象
我们在写脚本时,元素对象一般是这样写的WebElement element=driver.findElement(By.id("kw"));所以接下来我们要把ml变量里的“value”转换成By对象。添加如下代码,这样通过ml中的type与value的值对就产生一个By对象。
(4)产生WebElement对象
By对象产生后,就可以把这个对象传给driver.findElement方法,继而生成一个WebElement对象。
(5)调用WebElement对象
2.等待元素出现后调用
(1)waitForElement
在调用locator时,保证locator是显示在页面上的,webdriver中有个WebDriverWait对象,代码如下:
于是乎getElement方法里面就可以改为。
(2)waitElementToBeDisplayed
如果waitForElement这个方法,返回的WebElement对象包括隐藏的,那么隐藏对象在操作的时候,就会报错。所以我们要把隐藏的去掉,只显示displayed的元素对象,代码如下。
于是乎getElement方法里面就可以改为。
(3)waitElementToBeNonDisplayed
既然有等待元素对象显示的,那么反之就有等待元素对象消失的方法。
(4)getElementNoWait
如果元素不需要等待,那么可以增加一个方法,代码如下。
(5)重构getElement与getElementNoWait
现在的问题是getElement与getElementNoWait的方法体很接近,于是我们来重构下这部分的代码。先增加一个方法,存放相同的方法体。
再把getElement与getElementNoWait方法进行修改。
3.元素对象的参数化
(1)yaml文件中设置%s
在这里的参数用%s来表示,这样可以在getElement或getElementNoWait方法中把我们需要的值传递进去。比如如下图。
(2)增加getLocatorString方法
(3)调整getLocator方法
(4)调整且重载getElement与getElementNoWait方法
(5)调用参数化结果