原文链接:https://blog.csdn.net/qq_22003641/article/details/79137327
原文链接:http://www.testclass.net
声明:本文是参考上面链接,尊重原创
WebElement 方法
1.模拟键盘操作–sendkeys() ,keys 类
在使用键盘按键方法前需要先导入 keys 类。
//引入Keys包
import org.openqa.selenium.Keys;
webDriver driver = new ChromeDriver
driver.get("https://www.baidu.com")
WebElement element = driver.findElement(By.id("kw"));
element.sendkeys("seleniumm");
//删除多输入的m
element.sendkeys(Keys.BACK_SPACE);
//输入空格键+“教程”
element.sendkeys(Keys.SPACE);
element.sendkeys("教程");
//ctrl+a 全选输入框内容
element.sendkeys(Keys.CONTROL,"a");
driver.quit();
以下为常用的键盘操作:
sendKeys(Keys.BACK_SPACE) 回格键(BackSpace)
sendKeys(Keys.SPACE) 空格键(Space)
sendKeys(Keys.TAB) 制表键(Tab)
sendKeys(Keys.ESCAPE) 回退键(Esc)
sendKeys(Keys.ENTER) 回车键(Enter)
sendKeys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
sendKeys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
sendKeys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
sendKeys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
sendKeys(Keys.F1) 键盘 F1
……
sendKeys(Keys.F12) 键盘 F12
2.清除文本–clear()
driver.findElement(By.id("kw")).clear();
3.点击–click()
driver.findElement(By.id("kw")).click();
4.提交表单–submit()例如,在搜索框输入关键字之后的“回车” 操作, 就可以通过 submit()方法模拟.
driver.findElement(By.id("kw")).submit();
5.其他
- getSiz()返回元素的尺寸
- isDisplayed()设置该元素是否用户可见
- getText()获取元素的文本
- getAttribute(name)获取属性值
getAttribute(name)与getText()的区别
<input class="acxiom-input span7 inline" type="text" id="confirm_email_to_download" style="font-size: 14px;" autocomplete="OFF" value="amy1111@xxx.com">
//拿email的值"amy1111@xxx.com"
driver.findElement(By.id("confirm_email_to_download")).getAttribute("value")
<span id="current-selection">Acxiom</span>
driver.findElement(By.cssSelector("span#current-selection")).getText()
6.模拟鼠标操作–Actions 类
- contextClick()右击
- clickAndHold()鼠标点击并控制
- doubleClick()双击
- dragAndDrop()拖动
- release()释放鼠标
- perform()执行所有actions中储存的操作
package test;
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.interactions.Actions;
public class autoTest {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("http://baidu.com");
WebElement saerch=driver.findElement(By.linkText("设置"));
Actions action = new Actions(driver);
action.clickAndHold(saerch).perform();
driver.quit();
}
}
导入提供鼠标操作的 ActionChains 类
- Actions(driver) 调用Actions()类,将浏览器驱动driver作为参数传入、
- clickAndHold() 方法用于模拟鼠标悬停操作, 在调用时需要指定元素定位。
- perform() 执行所有ActionChains中存储的行为, 可以理解成是对整个操作的提交动作。
7.下拉框选择-Select类
<select id="nr" name="NR">
<option value="10" selected>每页显示 10 条</option>
<option value="20">每页显示 20 条</option>
<option value="50">每页显示 50 条</option>
代码如下:
WebElement el = driver.findElement(By.xpath("//select"));
Select sel = new Select(el);
sel.selectByValue("20");
Thread.sleep(2000);
driver.quit();
8.弹出框–switchTo().alert()
- getText(): 返回 alert/confirm/prompt 中的文字信息。
- accept(): 接受现有警告框
- dismiss(): 解散现有警告框
- sendKeys(keysToSend): 发送文本至警告框
- keysToSend: 将文本发送至警告框
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class autoUi {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("http://baidu.com");
driver.findElement(By.linkText("设置")).click();
driver.findElement(By.linkText("搜索设置")).click();
//保存设置
driver.findElement(By.className("prefpanelgo")).click();
//接收弹窗
driver.switchTo().alert().accept();
driver.quit();
}
}
9.文件上传–sendKeys()
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
File file = new File("./upfile.html");
String filePath= file.getAbsolutePath();
driver.get(filePath);
driver.findElement(By.name("file")).sendKeys("D:\\upload_file.txt");
driver.quit();
}
9.浏览器cookie操作–Cookie()
首先cookie是什么?
cookie是由服务端生成,发给User-Agent(一般指的是浏览器),浏览器会将cookie的key、value保存到耨个目录下的文本文件中,下次请求同一个网站时,就发送该cookie给服务器
import java.util.Set;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.Cookie;
public class CookieDemo {
public static void main(String[] args){
WebDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
Cookie c1 = new Cookie("name", "key-aaaaaaa");
Cookie c2 = new Cookie("value", "value-bbbbbb");
driver.manage().addCookie(c1);
driver.manage().addCookie(c2);
//获得 cookie
Set<Cookie> coo = driver.manage().getCookies();
System.out.println(coo);
//删除所有 cookie
//driver.manage().deleteAllCookies();
driver.quit();
}
9.多表单切换–switchTo().frame()
-
解决进入frame的方法
iFrame有ID 或者 name的情况 driver.switchTo().frame(“frame_name or id or xpath”); -
跳出iFrame
dr.switchTo().defaultContent();下图是126邮箱登录页,是一个frame
public class autoUi {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://mail.126.com/");
//找到这个frame
WebElement xf = driver.findElement(By.xpath("//*[@id='loginDiv']/iframe"));
//跳到frame中
driver.switchTo().frame(xf);
driver.findElement(By.name("email")).clear();
driver.findElement(By.name("email")).sendKeys("username");
driver.findElement(By.name("password")).clear();
driver.findElement(By.name("password")).sendKeys("password");
driver.findElement(By.id("dologin")).click();
//跳出该frame
driver.switchTo().defaultContent();
}
}
10.多窗口切换–switchTo().Window();
在页面操作过程中有时候点击某个链接会弹出新的窗口, 这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switchTo().window()方法可以实现在不同的窗口之间切换。
以百度首页和百度注册页为例,在两个窗口之间的切换
- getWindowHandle(): 获得当前窗口句柄。
- getWindowHandles(): 返回的所有窗口的句柄到当前会话。
- switchTo().window(): 用于切换到相应的窗口
实现窗口切换的代码如下
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class MoreWindows {
public static void main(String[] arge) throws InterruptedException{
WebDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
//获得当前窗口句柄
String search_handle = driver.getWindowHandle();
//打开百度注册窗口
driver.findElement(By.linkText("登录")).click();
Thread.sleep(3000);
driver.findElement(By.linkText("立即注册")).click();
//获得所有窗口句柄
Set<String> handles = driver.getWindowHandles();
//判断是否为注册窗口, 并操作注册窗口上的元素
for(String handle : handles){
if (handle.equals(search_handle)==false){
//切换到注册页面
driver.switchTo().window(handle);
System.out.println("now register window!");
Thread.sleep(2000);
driver.findElement(By.name("userName")).clear();
driver.findElement(By.name("userName")).sendKeys("user name");
driver.findElement(By.name("phone")).clear();
driver.findElement(By.name("phone")).sendKeys("phone number");
//......
Thread.sleep(2000);
//关闭当前窗口
driver.close();
}
}
Thread.sleep(2000);
driver.quit();
}
}