元素定位
万能定位方法:xpath 或者 css selector选择器。此处不再赘述,网上自行百度。
实践
-
封装常用操作界面元素的方法
-
web自动化中三种等待方法:
①显示等待
用webdriverwait对象,设置一个最长的等待时间
调用webdriverwait对象中的until方法。
until方法制成两种写法:
a、expectedconditions类,直接调用selenium当中已经封装好的各种预期事件方法
b、new expectedcondition接口
显示等待的好处,可以自由灵活的进行等待事件的指定。②最常用的:隐式等待
等待的方式和显示等待方式类似,但是等待的事件是固定在元素定位时,等待这个元素能够被定位。一次设置,在脚本范围之内,driver对象中生效。
调用方法:driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);可以直接在完成driver实例化之后调用,切换句柄之后最后再设置一次。③强制等待(Java线程等待)
thread.sleep方法,强制线程挂起指定毫秒数。 -
常见错误:ElementNotVisibleException:element not interactable (元素不可互动)
可能原因:
- 1)元素需要悬停到其他元素或者其他前置操作才在页面上出现
解决方案:
使用selenium提供的actions类,调用其中的方法:act.moveToElement(driver.findElement(By.xpath(XPath))).perform()【注意:记得最后加上perform表示这个动作要执行】
/**
* 悬停方法
* @param XPath
*/
public void hover(String XPath) {
Actions act = new Actions(driver);
act.moveToElement(driver.findElement(By.xpath(XPath))).perform();
}
- 2)当前操作元素不响应对应的事件,比如input元素统计的span等等纯文本元素,不响应点击。
- 出现新窗口时,需要进行窗口切换,才能继续操作,selenium用于区分窗口的标志是窗口的句柄,类似于窗口的编号。
切换窗口就是通过句柄的切换来完成的,思路:
- 1)通过页面标题或者内容(driver.getPagesource)来确定句柄
- 2)通过句柄的先后顺序关闭就窗口切换新窗口
- 遇到iframe(内联框架,将其他的页面嵌入到当前页面中,相当于HTML中嵌套HTML;而xpath是从最外层的HTML按照xpath指定的路径查找,不会进入到iframe里面),需要切换到iframe之后在进行定位操作。
driver.switchto.frame()
方法可以接受三种参数:
- 1)int型的序号(不建议使用)
- 2)String iframe的name或者id属性
- 3)webelement iframe元素对象
切出iframe代码driver.switchTo().defaultContent();
/**
* 切换到iframe子页面【ByXPath】
* @param xpath
*/
public void intoIframe(String xpath) {
try {
//定位到iframe元素,然后传递webelement给switchto.frame方法
WebElement frame = driver.findElement(By.xpath(xpath));
driver.switchTo().frame(frame);
} catch (Exception e) {
// TODO: handle exception
System.out.println("切入iframe失败");
}
}
/**
* 切入iframe子页面【ByName】
* @param name
*/
public void intoIframeByName(String name) {
try {
driver.switchTo().frame(name);
} catch (Exception e) {
// TODO: handle exception
System.out.println("切入iframe失败");
}
}
- 一屏展示不全的需要滚动页面,此时需要用的DOM的
window.scrollTo(0,900)
。通过把driver强转为js执行器类型来执行js脚本,代码如下:
public void runJs(String text) {
//强转driver为js执行器类型
JavascriptExecutor js = (JavascriptExecutor)driver;
try {
js.executeScript(text);
} catch (Exception e) {
// TODO: handle exception
System.out.println("js脚本执行失败");
}
}
最后附上元素定位常见错误:
上述内容源码下载地址:https://download.csdn.net/download/u014615615/11485074