WebDriver常用的API使用详解
1.浏览器操作
1).访问某个网站
driver.get("http://www.baidu.com"); //打开某个页面
driver.navigate().to("http://www.baidu.com"); //跳转到某个网站
2).浏览器窗口操作
driver.manage().window().maximize(); //浏览器最大化
driver.manage().window().setSize()(new Dimension(375,600)); //设置窗口大小
driver.manage().window().setPosition(new Point(400,500)); //设置窗口的位置
driver,manage().window().fullscreen(); //设置窗口的全屏操作
3).浏览器的前进和后退操作
driver.navigate().back(); //后退操作
driver.navigate().forward(); //前进操作
4).浏览器的刷新操作
driver.navigate().refresh();
具体代码如下:
package com.api.demo; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class testOpen { WebDriver driver; @BeforeClass public void beforeClass(){ //设定chrome浏览器驱动程序所在的位置为系统属性值 System.setProperty("webdriver.chrome.driver","driver/chromedriver.exe"); //将driver实例为ChromeDriver的对象 driver=new ChromeDriver(); //窗口最大化 driver.manage().window().maximize(); } @Test public void f() throws InterruptedException { //打开某个页面 driver.get("http://www.so.com"); //程序等待3s Thread.sleep(3000); //跳转到某个页面 driver.navigate().to("http://www.baidu.com"); Thread.sleep(3000); //浏览器的前进和后退操作 driver.navigate().back(); //driver.navigate().forward(); Thread.sleep(3000); //刷新页面 driver.navigate().refresh(); } @AfterClass public void afterClass(){ driver.quit(); } }
5).获取页面的标题
driver.getTitle()
6).获取页面的源代码
driver.getPageSource()
7).获取当前页面的url
driver.getCurrentUrl()
8).关闭浏览器
//退出并关闭所有的句柄
driver.quit();
//仅关闭当前的tab,即句柄
//driver.close();
2.元素操作
1)点击操作
获取到某一个元素之后.click()
isEnabled(); 一般用于判断输入框、下拉框等元素是否为可编辑状态,若可以编辑,则返回true,否则返回false
idDisplayed(); 用于判断元素是否存在页面上,这种存在不存在不是仅限于肉眼看到的存在
isSelected(); 用来判断某个元素是否被选中
2)输入操作
获取到某一个元素之后.sendKeys("内容"): 输入内容
获取到某一个元素之后.clear() : 清空文本
3)获取页面元素的文本内容
获取到某个元素之后.getTest();
4)获取页面元素的标签名称
获取到某个元素之后.getTagName();
3.鼠标事件
Actions类提供了鼠标操作常用的方法
click() 单击
moveToElement() 移动到某个元素
contextClick():右击
clickAndHold(): 点击并且不放
doubleClick():双击
dragAndDrop();拖拽
release():释放鼠标按键
perform():执行所有Actions中存储的行为
具体使用
//Actions(driver)调用Actions()类,将driver作为参数传入
Actions action=new Actions(driver);
action.moveToElement(login).perform(); //login为获取到的某一个元素
action.clickAndHold(login).pause(3000).release().perform(); //按住不放login元素,停留3秒,然后试释放该元素
action.dropAndDrop(ele1,ele2).perform(); //将ele1拖拽到ele2
还可以用clickAndHold() 和moveToElemene()实现相同的操作
action.clickAndHold(ele1).pause(1000).moveToElement(ele2).release(),perform();
键盘代码
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,'v') //粘贴(ctrl+v)
sendKeys(Keys.CONTROL,'x') //剪切(ctrl+x)
sendKeys(Keys.F1) //F1
sendKeys(Keys.F12) //F12
具体使用如下
@Test public void f() { driver.get("http://www.baidu.com"); WebElement ele=driver.findElement(By.id("kw")); ele.sendKeys("博客园"+Keys.ENTER); }
4.selenium中常见的等待
1)强制等待
Thread.sleep(int sleeptime) //让当前执行进程按照用户约定的时间暂停一段时间。弊端是不能确定元素多久才能加载完全,如果两秒元素就加载出来,结果强制等待了30秒,就会造成脚本执行时间的过度浪费
2)隐式等待
implicitlyWait:识别对象时的超时时间,如果过了设定的时间还没找到,就会抛出NoSuchElement异常
setScriptTimeout:异步脚本的超时时间,用于设置异步执行脚本,脚本执行返回结果的超时时间
pageLoadTimeout:页面加载时的超时时间,WebDriver需要等待页面加载完全才能级型后面的操作,如果页面加载超过设置时间仍没有加载完成,就会抛出异常
注意:以上3种方法设置的都是全局变量,对整个Driver都有作用。
代码如下:
driver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
3)显示等待
简单的说就是必须等到某个元素出现或者可操作等条件为止,才会继续执行后续的操作,如果等不到,就一直等待,如果在规定的时间没有等到,就会抛出异常
常用的显示等待判断条件
elementToBeClickable(By locator) 页面元素是否在页面上可用或者可被点击
elementToBeSelected(WebElement element) 页面元素处于被选中状态
presenceOfElementLocated(By locator) :页面元素在页面种存在
textToBePresentInElement(By locator):在页面元素种是否包含特定的文本
textToBePresentInElementValue(By locator,java.lang.String text) 页面元素值
//等待时间为3s,WebDriverWait默认每500ms就调用一次ExpectedCondition,直到定位到该元素,如果3s内该元素被定位到了,就继续下一步,如果超过3秒没有显示出来,until()就会抛出异常
WebDriverWait wait=new WebDriverWait(driver,3); wait.until(ExpectedConditions.presenceOfElementLocated(By.id("green_box")));
5.Selenium种的窗口切换
常用的切换方法
driver.getWindowHandle(); 获取当前窗口的Handle
driver.getWindowHandles(); 获取所有窗口的Handle,返回List集合
driver.switchTo().window(handle): 切换到对应的窗口
driver.close(): 关闭当前的窗口
6.iframe切换处理
关于 driver.switchTo().frame(参数),参数表达有以下几种方式
driver.switchTo().frame(element): 用WebElement元素对象来切换
driver.switchTo().frame(frameID):用id属性切换
driver.switchTo().frame("frameName"):用name属性切换
driver.switchTo().defaultContent(): 退出iframe,返回主页面
7.弹框处理
弹框的分类:Alert,Confirm,Prompt
alert弹框如下:
coonfirm弹框
Prompt弹框
弹框操作的主要方法说明
driver.switchTo().alert();切换到alert弹窗
getText();获取文本值
accept() 单击确认按钮
dismiss() 单击取消按钮或者对话框
send_keys() 输入文本值,但极限与prompt,在alert和confirm上没有输入框
//切换到弹窗 Alert alert=driver.switchTo().alert(); alert.getText(); //获取弹框的文本内容 alert.accept(); //确认操作 alert.dismiss(); //取消操作
8.单选框和复选框处理