1.操作页面元素之单选按钮
package webDriverAndView;
import static org.testng.Assert.assertTrue;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
/**
* 操作页面元素之单选按钮
* @author Administrator
*/
public class TestRadioButton {
private static WebDriver driver;
@Before
public void setUp()throws Exception {
System.setProperty("webdriver.firefox.marionette","F:\\ckx\\geckodriver\\geckodriver.exe");
driver=new FirefoxDriver();
driver.get("http://www.w3school.com.cn/html/html_form_input_types.asp");
}
@Test
public void testRadioButton()throws Exception {
WebElement radio=driver.findElement(By.xpath(".//*[@id='maincontent']/div[6]/form/input[2]"));
if(!radio.isSelected()) {
radio.click();
}
assertTrue(radio.isSelected());
}
@After
public void setDown()throws Exception {
driver.quit();
}
}
2.操作页面元素只多选按钮
package webDriverAndView;
import static org.testng.Assert.assertTrue;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestCheckButton {
static WebDriver driver;
@Before
public void setUp() {
System.setProperty("webdriver.firefox.marionette","F:\\ckx\\geckodriver\\geckodriver.exe");
driver=new FirefoxDriver();
driver.get("http://www.w3school.com.cn/html/html_form_input_types.asp");
}
@Test
public void testCheckButton() {
WebElement bike=driver.findElement(By.xpath(".//*[@id='maincontent']/div[7]/form/input[1]"));
if(!bike.isSelected()) {
bike.click();
}
assertTrue(bike.isSelected());
WebElement car=driver.findElement(By.xpath(".//*[@id='maincontent']/div[7]/form/input[2]"));
if(!car.isSelected()) {
car.click();
}
assertTrue(car.isSelected());
}
@After
public void setDown() {
driver.quit();
}
}
3.操作弹出窗口之验证标题
首先打开父窗口,通过变量来记录父窗口的控点。然后在父窗口中单击某按钮弹出子窗口。接着获取所有打开窗口的控点列表,查找到弹出子窗口的控点并切换到子窗口进行操作。最后根据之前保存的父窗口控点切换回父窗口。
package webDriverAndView;
import static org.testng.Assert.assertEquals;
import java.util.Set;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestMultipleWindowsTitles {
static WebDriver driver;
@Before
public void setUp() {
System.setProperty("webdriver.firefox.marionette","F:\\ckx\\geckodriver\\geckodriver.exe");
driver=new FirefoxDriver();
driver.get("https://www.w3schools.com/jsref/met_win_open.asp");
}
@Test
public void testMultipleWindowsTitles() {
String parentWindowId=driver.getWindowHandle();
assertEquals("Window open() Method", driver.getTitle());
WebElement tryItButton=driver.findElement(By.xpath(".//*[@id='main']/div[2]/a"));
tryItButton.click();
Set<String> allWindowIds=driver.getWindowHandles();
for(String windowId:allWindowIds) {
if(driver.switchTo().window(windowId).getTitle().contains("Try it")) {
driver.switchTo().window(windowId);
break;
}
}
assertEquals("Tryit Editor v3.5", driver.getTitle());
driver.switchTo().window(parentWindowId);
assertEquals("Window open() Method", driver.getTitle());
}
@After
public void setDown() {
driver.quit();
}
}
4.操作弹出窗口之验证内容
与上面唯一的不同就在于找到新窗口的方式不再是通过其标题来进行确定,而是直接通过网页上的内容来进行确定。因为有些弹出窗口本身就不具有标题。
package webDriverAndView;
import static org.testng.Assert.assertEquals;
import java.util.Set;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestMultipleWindowsPageContain {
static WebDriver driver;
@Before
public void setUp() {
System.setProperty("webdriver.firefox.marionette","F:\\ckx\\geckodriver\\geckodriver.exe");
driver=new FirefoxDriver();
driver.get("https://www.w3schools.com/jsref/met_win_open.asp");
}
@Test
public void testMultipleWindowsTitles() {
String parentWindowId=driver.getWindowHandle();
assertEquals("Window open() Method", driver.getTitle());
WebElement tryItButton=driver.findElement(By.xpath(".//*[@id='main']/div[2]/a"));
tryItButton.click();
Set<String> allWindowIds=driver.getWindowHandles();
for(String windowId:allWindowIds) {
if(driver.switchTo().window(windowId).getPageSource().contains("open a new browser window")) {
driver.switchTo().window(windowId);
break;
}
}
assertEquals("Tryit Editor v3.5", driver.getTitle());
driver.switchTo().window(parentWindowId);
assertEquals("Window open() Method", driver.getTitle());
}
@After
public void setDown() {
driver.quit();
}
}
5.操作警告框、提示框、确认框
html编码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function show_alert(){
alert('第一行\n第二行');
}
function show_confirm(){
var result = confirm('是否删除!');
if(result){
alert('删除成功!');
}else{
alert('不删除!');
}
}
function show_prompt(){
var value = prompt('输入你的名字:', '默认名字');
if(value == null){
alert('你取消了输入!');
}else if(value == ''){
alert('姓名输入为空,请重新输入!');
show_prompt();
}else{
alert('你好,'+value);
}
}
</script>
</head>
<body>
<input id="alert_button" type="button" value="alert"
οnclick="show_alert()" >
<input id="confirm_button" type="button" value="confirm"
οnclick="show_confirm()" >
<input id="prompt_button" type="button" value="prompt"
οnclick="show_prompt()" >
</body>
</html>
示例代码:
package webDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class testDialogs {
WebDriver driver;
@Before
public void setUp() {
System.setProperty("webdriver.firefox.marionette", "F:\\\\ckx\\\\geckodriver\\\\geckodriver.exe");
driver=new FirefoxDriver();
driver.get("F:\\ckx\\html\\dialogbox.html");
}
@Test
public void testAlert() {
WebElement elertElement=driver.findElement(By.xpath(".//*[@id='alert_button']"));
elertElement.click();
//获取alert
Alert javascriptAlert=driver.switchTo().alert();
//获取alert的内容
System.out.println(javascriptAlert.getText());
//点确定
javascriptAlert.accept();
}
@Test
public void testPrompt() {
WebElement promptElemant=driver.findElement(By.xpath(".//*[@id='confirm_button']"));
promptElemant.click();
Alert javascriptprompt=driver.switchTo().alert();
javascriptprompt.sendKeys("lh");
javascriptprompt.accept();
System.out.println(javascriptprompt.getText());
javascriptprompt=driver.switchTo().alert();
javascriptprompt.accept();
promptElemant.click();
javascriptprompt=driver.switchTo().alert();
System.out.println(javascriptprompt.getText());
javascriptprompt.dismiss();
javascriptprompt=driver.switchTo().alert();
System.out.println(javascriptprompt.getText());
javascriptprompt.accept();
}
@Test
public void testConfirm() {
WebElement confirmElement=driver.findElement(By.xpath(".//*[@id='prompt_button']"));
confirmElement.click();
Alert javascriptConfirm=driver.switchTo().alert();
javascriptConfirm.accept();
javascriptConfirm=driver.switchTo().alert();
System.out.println(javascriptConfirm.getText());
javascriptConfirm.accept();
confirmElement.click();
javascriptConfirm=driver.switchTo().alert();
System.out.println(javascriptConfirm.getText());
javascriptConfirm.dismiss();
javascriptConfirm=driver.switchTo().alert();
System.out.println(javascriptConfirm.getText());
javascriptConfirm.accept();
}
@After
public void closeDriver() {
driver.close();
}
}
6.操作浏览器最大化
WebDriver支持浏览器的最大化操作。
package webDriverAndView;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestMaxSizeBrowser {
static WebDriver driver;
@Before
public void setUp() throws Exception{
System.setProperty("webdriver.firefox.marionette","F:\\ckx\\geckodriver\\geckodriver.exe");
driver=new FirefoxDriver();
driver.get("http://www.baidu.com");
}
@Test
public void testMaxSizeBrowser() throws Exception{
driver.manage().window().maximize();
}
@After
public void setDown() throws Exception{
driver.quit();
}
}
7.操作浏览器Cookies
示例代码:
package webDriverAndView;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestGetCookies {
public static void main(String[] args) {
System.setProperty("webdriver.firefox.marionette","F:\\ckx\\geckodriver\\geckodriver.exe");
WebDriver driver=new FirefoxDriver();
driver.get("https://passport.youkuaiyun.com/account/login");
driver.findElement(By.id("username")).sendKeys("15757119427");
driver.findElement(By.id("password")).sendKeys("mailu7");
if(!driver.findElement(By.id("rememberMe")).isSelected()) {
driver.findElement(By.id("rememberMe")).click();
}
driver.findElement(By.className("logging")).click();
File cookieFile=new File("csdn.cookie.txt");
try {
cookieFile.delete();
cookieFile.createNewFile();
FileWriter fileWriter=new FileWriter(cookieFile);
BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
for(Cookie cookie:driver.manage().getCookies()) {
bufferedWriter.write(cookie.getName()+";"
+cookie.getValue()+";"
+cookie.getDomain()+";"
+cookie.getPath()+";"
+cookie.getExpiry()+";"
+cookie.isSecure());
bufferedWriter.newLine();
}
bufferedWriter.flush();
bufferedWriter.close();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
driver.quit();
}
}
示例代码详解:
1)打开csdn的登录页面
2)填写相关用户信息,用户名、密码等,然后进行登录
3)创建一个本地文件,用于存储后续获取的cookies信息
4)通过driver.manage().getCookies()获取cookies信息,并通过缓存和文件写操作,保存到csdn.cookie.txt文件中
接下来展示的是如何根据之前获取的cookies信息,自动填充到新打开的浏览器cookies中,然后直接进入登录状态后的页面
package webDriverAndView;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Date;
import java.util.StringTokenizer;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
/**
* 操作浏览器Cookies---填充cookies
* @author Administrator
*
*/
public class TestSetCookies {
private static BufferedReader bufferedReader;
public static void main(String[] args) {
System.setProperty("webdriver.firefox.marionette","F:\\ckx\\geckodriver\\geckodriver.exe");
WebDriver driver=new FirefoxDriver();
driver.get("https://passport.youkuaiyun.com/account/login");
try {
File file=new File("csdn.cookie.txt");
FileReader fileReader=new FileReader(file);
bufferedReader=new BufferedReader(fileReader);
String line;
while((line=bufferedReader.readLine())!=null) {
//StringTokenizer类:根据自定义字符为分界符进行拆分,并将结果进行封装提供对应方法进行遍历取值
StringTokenizer stringTokenizer=new StringTokenizer(line, ";");
while(stringTokenizer.hasMoreTokens()) {
String name=stringTokenizer.nextToken();
String value=stringTokenizer.nextToken();
String domain=stringTokenizer.nextToken();
String path=stringTokenizer.nextToken();
Date expiry=null;
String dt;
if(!(dt=stringTokenizer.nextToken()).equals("null")) {
expiry=new Date(dt);
}
boolean isSecure=new Boolean(stringTokenizer.nextToken()).booleanValue();
Cookie cookie=new Cookie(name, value, domain, path, expiry, isSecure);
driver.manage().addCookie(cookie);
}
}
} catch (Exception e) {
e.printStackTrace();
}
driver.get("http://www.youkuaiyun.com/");
}
}
示例代码详解:
1)打开csdn的登录页面
2)读取之前保存cookies信息的csdn.cookie.txt文件,并通过缓存操作和driver.manage().addCookies()操作将登录信息填充到浏览器的cookies中
3)打开csdn的主页面,可以看到已经进入登录状态
8.操作浏览器前进后退
WebDriver还提供了直接操作浏览器前进、后退、刷新等操作。示例代码如下:
package webDriverAndView;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestNavigate {
public static void main(String[] args) {
System.setProperty("webdriver.firefox.marionette","F:\\ckx\\geckodriver\\geckodriver.exe");
WebDriver driver=new FirefoxDriver();
driver.get("http://www.baidu.com");
System.out.println("Go to url:"+driver.getCurrentUrl());
driver.navigate().to("http://www.cnblogs.com");
System.out.println("Navigate to url:"+driver.getCurrentUrl());
driver.navigate().refresh();
driver.navigate().back();
System.out.println("Back to url:"+driver.getCurrentUrl());
driver.navigate().forward();
System.out.println("Forward to url:"+driver.getCurrentUrl());
driver.quit();
}
}
9.操作页面元素等待时间
WebDriver在操作页面元素等待时间时,提供了两种等待方式:显式等待、隐式等待。其区别在于:
1)显式等待:明确的告诉WebDriver按照特定的条件进行等待,条件未达到就一直等待。这在等待某个元素需要非常长的时间时非常有效。
2)隐式等待:告诉WebDriver一个最大的超时时间,如果等待的条件在超时以前就满足,则立即执行后续操作而无须等待超时到达。
package webDriverAndView;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class TestWait {
public static void main(String[] args) {
System.setProperty("webdriver.firefox.marionette","F:\\ckx\\geckodriver\\geckodriver.exe");
WebDriver driver=new FirefoxDriver();
driver.get("http://www.google.com");
WebElement searchBox=driver.findElement(By.name("q"));
searchBox.sendKeys("selenium 2");
searchBox.submit();
//显式等待
WebDriverWait driverWait = new WebDriverWait(driver, 10);
driverWait.until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver arg0) {
return arg0.getTitle().toLowerCase().startsWith("selenium");
}
});
System.out.println("Page title is "+driver.getTitle());
driver.navigate().back();
//隐式等待
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
searchBox.sendKeys("jmeter");
driver.findElement(By.name("btnK")).click();
driver.quit();
}
}