上一篇讲了另外三个文件里的方法(与驱动无关),下面来详细讲解一下,我们最最主要的几个方法(依赖驱动)。
首先声明几个变量,下面会用到。
public class UserFunction {
public static WebDriver dr;
public static String Text;
public static String title;
public static String objtext;
static String url;
public static void driver(String url) {
// TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
dr = driver;
Navigation na = dr.navigate();
dr.manage().window().maximize();
dr.get(url);
}
/*
* 识别元素,并点击
* activate(by.id("su"))
*/
public static void activate(By locator) throws Exception {
try {
WebElement element = (new WebDriverWait(dr,20)).until(ExpectedConditions.presenceOfElementLocated(locator));
dr.findElement(locator).click();
} catch (Exception e) {
UserFunction.screenShotSpecial();
dr.close();
throw new Exception("对不起,该元素未抓取到,请您查看当前页面元素位置是否有变动!");
}
}
扩展一下。如果一个页面存在多个相同属性值,无法使用唯一值来定位,那么就使用findelements这个方法,比如下面的这个方法:
/*
* 当页面存在多个相同元素时,使用该方法。index是从0开始计算的。比如说页面存在两个相同的submit元素需要点击第二个, 就使用
* activateByIndex这个方法,用法activateByIndex(By.id("submitOrder"), 1)
*
*/
public static void activateByIndex(By locator, int index) throws Exception {
try {
WebElement element = (new WebDriverWait(dr, 20))
.until(ExpectedConditions.presenceOfElementLocated(locator));
List list = null;
list = dr.findElements(locator);
list.get(index).click();
} catch (Exception e) {
UserFunction.screenShotSpecial();
dr.close();
throw new Exception("对不起,该元素未抓取到,请您查看当前页面元素位置是否有变动!");
}
}
/*
* 识别元素,并传值
* enterTextIn(by.id("kw"),"selenium2")
*/
public static void enterTextIn(By locator, String value) throws Exception {
try {
WebElement element = (new WebDriverWait(dr,20)).until(ExpectedConditions.presenceOfElementLocated(locator));
dr.findElement(locator).sendKeys(value);
} catch (Exception e) {
UserFunction.screenShotSpecial();
dr.close();
throw new Exception("对不起,该元素未抓取到,请您查看当前页面元素位置是否有变动!");
}
}
扩展,相同属性值,不同位置的元素操作,可以先获取这个元素,然后再传入位置来进行输入操作,同activateByIndex
/*
* 当页面存在相同属性值的元素值,需要输入文本的时候,可以采取这个方法。index是从0开始计算的,比如,像页面第5个标签信息为input的元素输入selenium2.
* enterTextInByIndex(By.tagName("input"), 4,"selenium2")
*/
public static void enterTextInByIndex(By locator, int index,String value) throws Exception {
try {
WebElement element = (new WebDriverWait(dr, 20))
.until(ExpectedConditions.presenceOfElementLocated(locator));
List list=dr.findElements(locator);
list.get(index).sendKeys(value);
} catch (Exception e) {
UserFunction.screenShotSpecial();
dr.close();
throw new Exception("对不起,该元素未抓取到,请您查看当前页面元素位置是否有变动!");
}
}
/*
* 切换窗口
* switchWindow(1)
*/
public static void switchWindow(int i) {
Set winHandels = dr.getWindowHandles();// 得到当前窗口的set集合
List it = new ArrayList(winHandels); // 将set集合存入list对象
dr.switchTo().window(it.get(i));// 切换到弹出的新窗口
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// String url = dr.getCurrentUrl();// 获取新窗口的url
// System.out.println(url);
// dr.switchTo().window(it.get(0));// 返回至原页面
}
/*
* 判断元素是否存在
*/
public static boolean isElementExist(By locator) throws Exception {
try {
WebElement element = (new WebDriverWait(dr,20)).until(ExpectedConditions.presenceOfElementLocated(locator));
return true;
} catch (Exception e) {
return false;
}
}
/*
* 清除输入框
*/
public static void clear(By locator) throws Exception {
try {
WebElement element = (new WebDriverWait(dr,20)).until(ExpectedConditions.presenceOfElementLocated(locator));
dr.findElement(locator).clear();
} catch (Exception e) {
UserFunction.screenShotSpecial();
dr.quit();
throw new Exception("对不起,该元素未抓取到,请您查看当前页面元素位置是否有变动!");
}
}
/*
* 关闭当前窗口
*/
public static void close() {
dr.close();
}
/*
* 关闭浏览器
*/
public static void quit() {
dr.quit();
}
/*
* 截图
*
*/
public static void screenShot() {
String filename = BasicFunction.DateString();
filename = filename + ".jpg";
String filepath = BasicFunction.NewDirectory();
File scrFile = ((TakesScreenshot) dr).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(scrFile, new File(filepath + "\\" + filename));
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Can't save screenshot");
e.printStackTrace();
} finally {
}
}
public static void screenShotSpecial() throws Exception {
String picname = BasicFunction.dateString();
picname = picname + ".jpg";
String filename = System.getProperty("user.dir");
String file = filename + "\\src\\test_result\\special";
File scrFile = ((TakesScreenshot) dr).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(scrFile, new File(file + "\\" + filename));
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("Can't save screenshot");
e.printStackTrace();
} finally {
}
}
有疑问的加V了解详情:zx1187463903
到这里,依赖ChromeDriver的几个常用方法已经封装完了,理解了吗?
如果你也搞定了,开心的同时请小编喝个咖啡也极好的呀。