對應的selenium和Driver版本下载链接
**注意:selenium和WebDriver版本要对应
把WebDriver(我用的IE的IEDriverServer.exe)放到本地文件夹下,设置环境变量path,指定到该路径。
// 指定Driver的位置
System.setProperty("webdriver.ie.driver", "F:\\Driver\\IEDriverServer.exe"); // 必须加
// 实例化一个driver对象
WebDriver d = new InternetExplorerDriver();
下面的完成代码有注释,很清楚的:
package com.kone;
import java.io.File;
import java.io.IOException;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.io.FileHandler;
public class SeleniumTest {
public static void main(String[] args) throws InterruptedException, IOException {
// 指定Driver的位置
System.setProperty("webdriver.ie.driver", "F:\\Driver\\IEDriverServer.exe"); // 必须加
// 实例化一个driver对象
WebDriver d = new InternetExplorerDriver();
// 打开网页
d.get("http://www.baidu.com/");
// 获得网页标题
System.out.println("d.getTitle():" + d.getTitle());
// 当前页面的url
//System.out.println("d.getPageSource():" + d.getPageSource());
// 最大化窗口
d.manage().window().maximize();
// 关闭当前窗口,如果只有一个窗口,则关闭浏览器
// d.close();
// 关闭webdriver启动的所有窗口
// d.quit();
// 使用navigate.to打开指定网页地址:百度新闻
d.navigate().to("http://news.baidu.com/");
Thread.sleep(1000);
// 点击打开另一个页面:国内新闻
d.findElement(By.linkText("国内")).click();
Thread.sleep(1000);
// 使用navigate.back返回到百度新闻页
d.navigate().back();
Thread.sleep(1000);
// 使用navigate.forward返回到百度国内新闻页
d.navigate().forward();
Thread.sleep(1000);
// 使用navigate.refresh刷新当前页面
d.navigate().refresh();
d.navigate().to("http://www.baidu.com/");
// 输入查询关键字
d.findElement(By.id("kw")).sendKeys("a");
try {
// 点击查询按钮,此处id给了错误的所以失败后会走到catch分支进行截图
d.findElement(By.id("su112233")).click();
} catch (Exception e) {
// 失败后调用下面的getScreenShot方法进行截图
//将WebDriver类型的对象转换成TakesScreenshot类型的对象,以方便用它的抓图的方法
TakesScreenshot srcShot = (TakesScreenshot) d;
//利用getScreenshotAs()实现截图并将截图保存到srcFile中
File srcFile = srcShot.getScreenshotAs(OutputType.FILE);
File desFile = new File("D:\\srcShots.png");
FileHandler.copy(srcFile, desFile);
}
}
}
Selenium
自动化,我们需要做的最基本的事情就是在页面找到元素并通过脚本程
序去操作这个元素,实现模拟人工操作。我们有多种定位元素的方式可以选择:
通过元素的
ID定位元素:
findElement(By.id(element));
通过元素的名称定位元素:
findElement(By.name(element));
通过元素的html中的位置定位元素:
findElement(By.xpath(element));
通过元素的标签名称定位元素:
findElement(By.tagName(element));
通过元素的链接名称定位元素:
findElement(By.linkText(element));
通过元素的类名定位元素:
findElement(By.className(element));
通过元素的css定位元素:
findElement(By.cssSelector(element));
通过元素的部分链接名称定位元素:
findElement(By.partialLinkText(element));
不同的元素我们进行不同的操作,按钮的点击、输入框的字符输入、或者是元素的内
容获取,不同的元素我们操作的方式不一。
对ID为element的元素进行点击操作:
driver.findElement(By.id(element)).click();
对ID为element的元素进行发送字符操作:
driver.findElement(By.id(element)).sendKeys(“XXXXXX”);
这里只举用的最多且最简单的的两例元素的操作,
还有的是先获取元素后,再单独操作
WebElement text1 = driver.findElement(By.name(“password”));
text1.sendKeys(“123456”);
模拟鼠标点击:driver.click();
打开网页:driver.get(“https://www.baidu.com”);
关闭网页:driver.close();
在输入框中输入内容:text.sendKeys(“”);
清空输入框中的内容:text.clear();
获取输入框中的内容:text.getText();
选择下拉框中的元素:
Select select = new Select(wd.findElement(By.id(“select”)));
切换到某个frame:
driver.switchTo().frame("");
从一个frame切换到另一个frame:
driver.switchTo().frame("");
切换到某个window:
driver.switchTo().window(“windowName”);
返回父iframe:(一般在跳转frame之前都写上这个语句)
driver.switchTo().defaultContent();
刷新页面:driver.navigate().refresh();
页面前进后退:
driver.navigate().forward();
driver.navigate().back();
输入框(text field or textarea)
WebElement element = driver.findElement(By.id("passwd-id"));
element.sendKeys(“test”);//在输入框中输入内容:
element.clear(); //将输入框清空
element.getText(); //获取输入框的文本内容:
Select select = new Select(driver.findElement(By.id("select")));
select.selectByVisibleText(“A”);
select.selectByValue(“1”);
select.deselectAll();
select.deselectByValue(“1”);
select.deselectByVisibleText(“A”);
select.getAllSelectedOptions();
select.getFirstSelectedOption();
ebElement radio=driver.findElement(By.id("BookMode"));
radio.click(); //选择某个单选项
radio.clear(); //清空某个单选项
radio.isSelected(); //判断某个单选项是否已经被选择
WebElement checkbox = driver.findElement(By.id("myCheckbox."));
checkbox.click();
checkbox.clear();
checkbox.isSelected();
checkbox.isEnabled();
WebElement btn= driver.findElement(By.id("save"));
btn.click(); //点击按钮
btn.isEnabled (); //判断按钮是否enable
Alert alert = driver.switchTo().alert();
alert.accept(); //确定
alert.dismiss(); //取消
alert.getText(); //获取文本
Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:
WebElement approve = driver.findElement(By.id("approve"));
approve.click();
或
approve.submit();//只适合于表单的提交
WebElement adFileUpload =driver.findElement(By.id("WAP-upload"));
String filePath = "C:\test\\uploadfile\\media_ads\\test.jpg";
adFileUpload.sendKeys(filePath);
Web driver对Java Script的调用是通过JavascriptExecutor来实现的,例如:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(“JS脚本”);
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //识别元素时的超时时间
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //页面加载时的超时时间
driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS); //异步脚本的超时时间