介绍一个火狐的插件firepath
我做的自动化测试是在火狐上运行的,因为我找到一个对于自动化测试比较有帮助的插件,那就是firepath,具体用法,就是先安装该插件,它会在firebug那么调试的窗口最右边出现。firepath截图和firepath安装后的截图如下所示。(优点:点哪个元素,哪个元素的xpath路径立马显示,看图吧)
package com.cyyun.weibogettoken; import java.util.Iterator; import java.util.List; import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; /** * * WebDriver帮助类 */ public class WebDriverUtil { /** * * 写在前面的话: * * 我写的这个WebDriver帮助类法仅仅针对于xpath访问的 * * 为什么这么写呢?有两点理由 * * 其一:xpath获取方便,我用的是firefox浏览器,只要用firepath这个插件,我们就可以正确的定位到每一个节点, * 并且firepath支持查询功能,值得大家使用 * * 其二:使用统一的xpath,给编码带来了一定的规范 */ /** * * 没有验证码的的登录 * * @param wd * WebDriver对象 * * @param unameXpath * 用户名的xpath路径 * * @param uname * 用户名 * * @param pwdXpath * 密码xpath路径 * * @param pwdValue * 密码 * * @param loginBtnXpath * 登录按钮xpath */ public static void login(WebDriver wd, String url, String unameXpath, String uname, String pwdXpath, String pwd, String loginBtnXpath) { wd.get(url); inputs(wd, unameXpath, uname); inputs(wd, pwdXpath, pwd); click(wd, loginBtnXpath); } /** * * 登录可能放在一个frame里了:我是因为遇到过,所以才加了个方法的 * * @param wd * WebDriver对象 * * @param unameXpath * 用户名的xpath路径 * * @param uname * 用户名 * * @param pwdXpath * 密码xpath路径 * * @param pwdValue * 密码 * * @param loginBtnXpath * 登录按钮xpath * * @param frame * 第几个框架 */ public static void loginFrame(WebDriver wd, String url, String unameXpath, String uname, String pwdXpath, String pwd, String loginBtnXpath, int frame) { wd.get(url); wd.switchTo().frame(frame); inputs(wd, unameXpath, uname); inputs(wd, pwdXpath, pwd); click(wd, loginBtnXpath); } /** * * 有验证码的登录 * * @param wd * WebDriver对象 * * @param unameXpath * 用户名的xpath路径 * * @param uname * 用户名 * * @param pwdXpath * 密码xpath路径 * * @param pwdValue * 密码 * * @param loginBtnXpath * 登录按钮xpath * * @param seconds * 输入验证码的间隔 */ public static void loginVerify(WebDriver wd, String url, String unameXpath, String uname, String pwdXpath, String pwd, String loginBtnXpath, int seconds) { wd.get(url); inputs(wd, unameXpath, uname); inputs(wd, pwdXpath, pwd); try { Thread.sleep(seconds * 1000); // 这段时间内请输入验证码 } catch (InterruptedException e) { e.printStackTrace(); } click(wd, loginBtnXpath); } /** * * 获取页面单个元素 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath * * @return */ public static WebElement getElement(WebDriver wd, String xpath) { return wd.findElement(By.xpath(xpath)); } /** * * 获取页面的一组元素 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath * * @return */ public static List<WebElement> getElements(WebDriver wd, String xpath) { return wd.findElements(By.xpath(xpath)); } /** * * 获取元素节点的文本值 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath * * @return */ public static String getText(WebDriver wd, String xpath) { return wd.findElement(By.xpath(xpath)).getText(); } /** * * 获取元素节点的文本值 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath * * @return 没有找到该元素时会有个提示,并且不会报错,建议使用 */ public static String getExistText(WebDriver wd, String xpath) { if (isExist(wd, xpath)) { return getText(wd, xpath); } return "-1"; } /** * * 获取元素节点的属性值 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath * * @attribute 要获取目标节点的哪个属性 * * @return */ public static String getAttribute(WebDriver wd, String xpath, String attribute) { return wd.findElement(By.xpath(xpath)).getAttribute(attribute); } /** * * 点击节点 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath * * @return */ public static void click(WebDriver wd, String xpath) { wd.findElement(By.xpath(xpath)).click(); } /** * * 输入文本 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath * * @return */ public static void inputs(WebDriver wd, String xpath, String value) { wd.findElement(By.xpath(xpath)).sendKeys(value); } /** * * 判断是否选中 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath * * @return */ public static boolean isChecked(WebDriver wd, String xpath) { return wd.findElement(By.xpath(xpath)).isSelected(); } /** * * 判断是否可用 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath * * @return */ public static boolean isEnabled(WebDriver wd, String xpath) { return wd.findElement(By.xpath(xpath)).isEnabled(); } /** * * 判断是否存在元素 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath * * @return */ public static boolean isExist(WebDriver wd, String xpath) { try { wd.findElement(By.xpath(xpath)); return true; } catch (NoSuchElementException e) { return false; } } /** * * 选中复选框,其实和点击一样,只是重新起了个名字 * * @param wd * WebDriver对象 * * @param xpath * 目标节点的xpath */ public static void check(WebDriver wd, String xpath) { click(wd, xpath); } /** * * 点击那种隐藏的下拉框 * * @param wd * WebDriver对象 * * @param xpath1 * 事件源节点的xpath * * @param xpath2 * 目标节点的xpath */ public static void clickHidden(WebDriver wd, String xpath1, String xpath2) { click(wd, xpath1); click(wd, xpath2); } /** * * 获取隐藏的文本,原理同上 * * @param wd * WebDriver对象 * * @param xpath1 * 事件源节点的xpath * * @param xpath2 * 目标节点的xpath */ public static void getHiddenText(WebDriver wd, String xpath1, String xpath2) { click(wd, xpath1); getText(wd, xpath2); } /** * * 获取隐藏节点的属性值 * * @param wd * WebDriver对象 * * @param xpath1 * 事件源节点的xpath * * @param xpath2 * 目标节点的xpath * * @param attribute * 要获取目标节点的哪个属性 */ public static String getHiddenAttribute(WebDriver wd, String xpath1, String xpath2, String attribute) { click(wd, xpath1); return getAttribute(wd, xpath2, attribute); } /** * * 切换窗口 * * @param wd * WebDriver对象 * * @param title * 要切换窗口的标题 */ public static void changeWindow(WebDriver wd, String title) { String current = wd.getWindowHandle(); Set<String> all = wd.getWindowHandles(); Iterator<String> iterator = all.iterator(); while (iterator.hasNext()) { String handle = iterator.next(); if (handle.equals(current)) { continue; } else { wd.switchTo().window(handle); if (wd.getTitle().contains(title)) { System.out.println("窗口成功跳转"); break; } else { continue; } } } } }