Web UI自动化----元素定位
1.Iframe/frame原因导致
这个原因还是比较常见的,主要是因为frame是在页面当中嵌入了另一个页面,但是webdriver定位只能定位到在一个页面上,所以不管你如何调整定位方式都没用,这时必选先定位到相应的frame下,再去定位元素。
解决办法:如果iframe有id或者name的情况下
直接就可以用Switch_to_frame(“id值或者name值”)
如果iframe没有id或者name,则参考下面写法
#先定位到iframe
elementi= driver.find_element_by_class_name('APP-editor-iframe')
#再将定位对象传给switch_to_frame()方法
driver.switch_to_frame(elementi)
如果完成操作后,可以通过switch_to.parent_content()方法跳出当前iframe,或者还可以通过switch_to.default_content()方法跳回最外层的页面。
2.页面加载过慢,还没加载完毕就开始找元素
这个原因影响到因素比较多,至少可以肯定我们需要设置一个等待时间去等待某元素的出现。
解决办法:显式等待
显式等待是针对于某个特定的元素设置的等待时间,如果在规定的时间范围内,没有找到元素,则会抛出异常,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作。
// 每隔1秒去调用一下until中的函数,默认是0.5秒,如果等待10秒还没有找到元素 。则抛出异常。
WebDriverWait wait = new WebDriverWait(driver, 10, 1);
wait.until(new ExpectedCondition<WebElement>() {
}).sendKeys("我是一个自动化测试小脚本");
}
隐式等待
隐式等待是设置的全局等待,分为页面加载超时等待 ;页面元素加载超时; 异 步脚本超时。
如果是页面元素超时,设置等待时间,是对页面中的所有元素设置加载时间。隐式 等待是其实可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到 相关元素或者时间结束。
笨方法等待
使当前线程进入等待,Thread.sleep();这种等待属于死等,很容易让线程挂掉,使用程序抛异常,所以我们要慎用此方法。
3.动态id定位不到元素:
对于每次id动态变动的情况,所以推荐使用xpath的相对路径方法查找到该元素。
4.firefox不允许跨域调用出现报错
try{
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
alert("Permission UniversalBrowserRead denied.");
}
5.脚本定位写错
这个问题就不多做赘述了,特别是xpath写法相对来讲比较长,也容易出现一些路径没理清的问题,建议大家多写多练,掌握不同的定位方式。
注:部分写法参考
// waitForElementPresent locator 等待直到某个元素在页面中存在
// waitForElementNotPresent locator 等待直到某个元素在页面中不存在
//
// waitForTextPresent text 等待直到某个文本在页面中存在
// waitForTextNotPresent text 等待直到某个文本在页面中不存在
//
// waitForText locator text 等待直到locator指定元素内的文本符合text
// waitForNotText locator text 等待直到locator指定元素内的文本不符合text
//
// waitForVisible locator 等待直到locator指定元素在页面中可见
// waitForNotVisible locator 等待直到locator指定元素在页面中不可见
//
// waitForTitle title 等待直到页面标题符合所指定的title
// waitForNotTitle title 等待直到页面标题不符合所指定的title
// waitForLocation url 等待直到页面的地址符合所指定的url
// waitForNotLocation url 等待直到页面的地址不符合所指定的url
//
// waitForValue locator value 等待直到locator指定的元素的value值符合指定的值
// waitForNotValue locator value 等待直到locator指定的元素的value值不符合指定的值
//
// waitForAttribute locator@attr value 等待直到locator指定的元素的attr属性值符合指定的值
// waitForNotAttribute locator@attr value 等待直到locator指定的元素的attr属性值不符合指定的值
//
// waitForChecked locator 等待直到locator指定的radio或checkbox成为选中状态
// waitForNotChecked locator 等待直到locator指定的radio或checkbox成为非选中状态
//
// waitForEditable locator 等待直到locator指定的input或textarea元素可编辑
// waitForNotEditable locator 等待直到locator指定的input或textarea元素不可编辑
// waitForXpathCount xpath count 等待直到页面符合xpath的数量为count
// waitForNotXpathCount xpath count 等待直到页面符合xpath的数量不为count
//
// waitForEval script pattern 等待直到script的执行结果符合pattern
// waitForNotEval script pattern 等待直到script的执行结果不符合pattern

浙公网安备 33010602011771号