前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >自动化-Selenium 3-常用API(Java版)

自动化-Selenium 3-常用API(Java版)

作者头像
wangmcn
发布2022-07-22 15:52:04
发布2022-07-22 15:52:04
1.1K00
代码可运行
举报
文章被收录于专栏:AllTests软件测试AllTests软件测试
运行总次数:0
代码可运行

常用API

第1章 浏览器操作

1、浏览器窗口大小设置

代码语言:javascript
代码运行次数:0
运行
复制
// 设置浏览器宽480、高800
Dimension d = new Dimension(480, 800);
driver.manage().window().setSize(d);
// 浏览器窗口最大化
driver.manage().window().maximize();

2、浏览器页面前进后退

代码语言:javascript
代码运行次数:0
运行
复制
// 前进
driver.navigate().forward();
// 后退
driver.navigate().back();

3、浏览器页面刷新

代码语言:javascript
代码运行次数:0
运行
复制
// 刷新
driver.navigate().refresh();

4、浏览器关闭

代码语言:javascript
代码运行次数:0
运行
复制
// 关闭当前窗口
driver.close();
// 退出驱动并关闭所有关联的窗口
driver.quit();

5、脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
package com.test.api;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
/**
 * 浏览器操作
 *
 * @author wangmcn
 *
 */
public class Browser {
       public static void main(String[] args) throws Exception {
              System.setProperty("webdriver.chrome.driver", "D:\\workspace2\\My_Selenium_Demo\\driver\\win\\chromedriver.exe");
              ChromeOptions option = new ChromeOptions();
              option.addArguments("disable-infobars");
              WebDriver driver = new ChromeDriver(option);
              driver.get("https://www.baidu.com/");

              // 设置浏览器宽480、高800
              Dimension d = new Dimension(480, 800);
              driver.manage().window().setSize(d);
              Thread.sleep(2000);

              // 浏览器窗口最大化
              driver.manage().window().maximize();
              Thread.sleep(2000);

              driver.get("https://cn.bing.com");
              Thread.sleep(2000);

              // 刷新
              driver.navigate().refresh(); 
              Thread.sleep(2000);

              // 后退
              driver.navigate().back();
              Thread.sleep(2000);

              // 前进
              driver.navigate().forward();
              Thread.sleep(2000);

              // 关闭当前窗口
              driver.close();
              Thread.sleep(2000);

              // 退出驱动并关闭所有关联的窗口
              driver.quit();
       }
}

第2章 下拉菜单选择

如图所示:带有标签的下拉菜单选择页面源码

1、使用Select类来处理下拉菜单

代码语言:javascript
代码运行次数:0
运行
复制
Select sel = new Select(driver.findElement(By.id("select-demo")));
// 通过value来选择,例如:香蕉
sel.selectByValue("banana");
// 通过index来选择(从0开始),例如:葡萄
sel.selectByIndex(2);
// 通过text来选择,例如:苹果
sel.selectByVisibleText("苹果");

2、脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
package com.test.api;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.Select;
/**
 * 下拉菜单选择
 *
 * @author wangmcn
 *
 */
public class SelectDemo {
       public static void main(String[] args) throws Exception {
              System.setProperty("webdriver.chrome.driver", "D:\\workspace2\\My_Selenium_Demo\\driver\\win\\chromedriver.exe");
              ChromeOptions option = new ChromeOptions();
              option.addArguments("disable-infobars");
              WebDriver driver = new ChromeDriver(option);
              driver.get("D:\\workspace2\\My_Selenium_Demo\\html\\select.html");
              Select sel = new Select(driver.findElement(By.id("select-demo")));
              Thread.sleep(2000);

              // 通过value来选择,例如:香蕉
              sel.selectByValue("banana");
              Thread.sleep(2000);

              // 通过index来选择(从0开始),例如:葡萄
              sel.selectByIndex(2);
              Thread.sleep(2000);

              // 通过text来选择,例如:苹果
              sel.selectByVisibleText("苹果");
              Thread.sleep(2000);

              driver.quit();
       }
}

第3章 鼠标事件

Actions类提供的鼠标事件常用方法(perform()执行所有Actions中存储的行为):

Actions action = new Actions(driver);

1、双击doubleClick()

例如:双击百度搜索框

百度搜索框页面源码

代码语言:javascript
代码运行次数:0
运行
复制
// 双击操作
action.doubleClick(driver.findElement(By.id("kw"))).perform();

2、右击contextClick()

例如:百度搜索框内右击操作

代码语言:javascript
代码运行次数:0
运行
复制
// 右击操作
action.contextClick(driver.findElement(By.id("kw"))).perform();

3、悬停moveToElement()

例如:悬停设置按钮

设置页面源码

代码语言:javascript
代码运行次数:0
运行
复制
// 悬停操作
action.moveToElement(driver.findElement(By.className("pf"))).perform();

4、拖放操作dragAndDrop(ele1, ele2)

在源元素上按下鼠标左键,然后移动到目标元素上释放。

ele1:鼠标拖动的源元素。

ele2:鼠标释放的目标元素。

例如:将Drag me拖放到Item 2

页面源码

代码语言:javascript
代码运行次数:0
运行
复制
// 拖放操作
// 定位元素的源位置
WebElement ele1 = driver.findElement(By.id("dragger"));
// 定位元素要移动到的目标位置
WebElement ele2 = driver.findElement(By.xpath("//div[text()='Item 2']"));
action.dragAndDrop(ele1, ele2).perform();

5、脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
package com.test.api;
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.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions;
/**
 * 鼠标事件
 *
 * @author wangmcn
 *
 */
public class MouseEvent {
       public static void main(String[] args) throws Exception {
              System.setProperty("webdriver.chrome.driver", "D:\\workspace2\\My_Selenium_Demo\\driver\\win\\chromedriver.exe");
              ChromeOptions option = new ChromeOptions();
              option.addArguments("disable-infobars");
              WebDriver driver = new ChromeDriver(option);
              driver.get("https://www.baidu.com");
              driver.findElement(By.id("kw")).sendKeys("Selenium");
              Thread.sleep(2000);
              Actions action = new Actions(driver);

              // 双击操作
              action.doubleClick(driver.findElement(By.id("kw"))).perform();
              Thread.sleep(2000);

              // 右击操作
              action.contextClick(driver.findElement(By.id("kw"))).perform();
              Thread.sleep(2000);

              // 悬停操作
              action.moveToElement(driver.findElement(By.className("pf"))).perform();
              Thread.sleep(2000);

              driver.get("http://sahitest.com/demo/dragDropMooTools.htm");
              Thread.sleep(2000);

              // 拖放操作
              // 定位元素的源位置
              WebElement ele1 = driver.findElement(By.id("dragger"));
              // 定位元素要移动到的目标位置
              WebElement ele2 = driver.findElement(By.xpath("//div[text()='Item 2']"));
              action.dragAndDrop(ele1, ele2).perform();
              Thread.sleep(2000);

              driver.quit();
       }
}

第4章 键盘事件

1、使用Keys类来处理键盘操作:

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、脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
package com.test.api;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
/**
 * 键盘事件
 *
 * @author wangmcn
 *
 */
public class KeyboardEvent {
       public static void main(String[] args) throws Exception {
              System.setProperty("webdriver.chrome.driver", "D:\\workspace2\\My_Selenium_Demo\\driver\\win\\chromedriver.exe");
              ChromeOptions option = new ChromeOptions();
              option.addArguments("disable-infobars");
              WebDriver driver = new ChromeDriver(option);
              driver.get("https://www.baidu.com");
              driver.findElement(By.id("kw")).sendKeys("Selenium");
              Thread.sleep(2000);

              // Ctrl+A 全选操作
              driver.findElement(By.id("kw")).sendKeys(Keys.CONTROL,"a");
              Thread.sleep(2000);

              // Ctrl+C 复制操作
              driver.findElement(By.id("kw")).sendKeys(Keys.CONTROL,"c");
              Thread.sleep(2000);

              driver.get("http://cn.bing.com");
              Thread.sleep(2000);

              // Ctrl+V 粘贴操作
              driver.findElement(By.id("sb_form_q")).sendKeys(Keys.CONTROL,"v");
              Thread.sleep(2000);

              // 回车键操作
              driver.findElement(By.id("sb_form_q")).sendKeys(Keys.ENTER);
              Thread.sleep(2000);

              driver.quit();
       }
}

第5章 元素等待

1、显示等待

在设定时间内,针对某一个元素,默认每隔一段时间检测该元素是否存在,如果超过设定时间检测不到则抛出异常。

WebDriverWait()

例如:

WebDriverWait(driver, 5, 1)

driver - WebDriver的驱动程序(IE、Firefox、Chrome等)

5 - 最长超时时间,默认以秒为单位

1 - 休眠时间的间隔(步长)时间,默认为0.5秒

2、隐式等待

implicitlyWait识别对象时的超时时间。超过这个时间如果对象还没有找到的话就会抛出NoSuchElement异常。

setScriptTimeout异步脚本的超时时间。WebDriver可以异步执行脚本,这个是设置异步执行脚本脚本返回结果的超时时间。

pageLoadTimeout页面加载时的超时时间。因为WebDriver会等页面加载完毕再进行后面的操作,所以如果页面超过设置时间依然没有加载完成,那么WebDriver就会抛出异常。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
// 定位对象时给10秒时间, 如果10秒内还定位不到则抛出异常 
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// 异步脚本的超时时间设置成3秒 
driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS);
// 页面加载超时时间设置为5秒
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);

3、sleep休眠

当执行到sleep()方法时会固定的休眠所设置的时长,然后再继续执行。

sleep()方法默认参数以毫秒为单位,1000毫秒=1秒。

例如:

Thread.sleep(2000);

4、脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
package com.test.api;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
/**
 * 元素等待
 *
 * @author wangmcn
 *
 */
public class ElementWait {
       public static void main(String[] args) throws Exception {
              System.setProperty("webdriver.chrome.driver", "D:\\workspace2\\My_Selenium_Demo\\driver\\win\\chromedriver.exe");
              ChromeOptions option = new ChromeOptions();
              option.addArguments("disable-infobars");
              WebDriver driver = new ChromeDriver(option);
              driver.get("https://www.baidu.com");

              // 显式等待
              // 最长超时时间5秒,检测的间隔时间为1秒(默认为0.5秒)
              WebDriverWait wait = new WebDriverWait(driver, 5, 1);
              wait.until(ExpectedConditions.presenceOfElementLocated(By.id("kw"))).sendKeys("Selenium");

              // 隐式等待
              // 定位对象时给10秒时间, 如果10秒内还定位不到则抛出异常 
              driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
              driver.findElement(By.id("kw")).sendKeys("1"); 
              // 异步脚本的超时时间设置成3秒 
              driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS);
              driver.findElement(By.id("kw")).sendKeys("2"); 
              // 页面加载超时时间设置为5秒
              driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS); 
              driver.findElement(By.id("kw")).sendKeys("3"); 

              // sleep休眠
              Thread.sleep(2000);

              driver.quit();
       }
}

第6章 多表单切换

在Web应用中经常会遇到表单嵌套页面,Frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位;而frame和iframe需要切换进去才能定位到其中的元素。这时就需要通过switchTo().frame()方法将当前定位的主体切换为 frame/iframe表单的内嵌页面中。

如图所示:输入框frame div在层frameA内,要想输入操作则需要进入层frameA。

页面源码:

1、switchTo().frame() 默认可以直接取表单的id或name属性进行切换,也可以用Xpath等。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
driver.switchTo().frame("frameA");
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@src='frame2.html']")));

2、switchTo().parentFrame() 跳出当前层

3、switchTo().defaultContent() 返回最外层

4、脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
package com.test.api;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
/**
 * 多表单切换
 *
 * @author wangmcn
 *
 */
public class Frame {
       public static void main(String[] args) throws Exception {
              System.setProperty("webdriver.chrome.driver", "D:\\workspace2\\My_Selenium_Demo\\driver\\win\\chromedriver.exe");
              ChromeOptions option = new ChromeOptions();
              option.addArguments("disable-infobars");
              WebDriver driver = new ChromeDriver(option);
              driver.get("D:\\workspace2\\My_Selenium_Demo\\html\\frame1.html");
              driver.findElement(By.id("maininput")).sendKeys("Selenium1");
              Thread.sleep(2000);

              // 跳进层
              driver.switchTo().frame("frameA"); 
              driver.findElement(By.id("iframeinput")).sendKeys("Selenium2");
              Thread.sleep(2000);

              // 跳出当前层
              driver.switchTo().parentFrame();

              // 跳进层
              driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@src='frame2.html']"))); 
              driver.findElement(By.id("iframeinput")).sendKeys("Selenium3");
              Thread.sleep(2000);

              // 返回最外层
              driver.switchTo().defaultContent();

              driver.quit();
       }
}

第7章 多窗口切换

在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要切换到新打开的窗口上进行操作。switchTo().window()方法可以实现在不同的窗口之间切换。

getWindowHandle() 获得当前窗口句柄

getWindowHandles() 获取所有窗口句柄

switchTo().window() 切换窗口

如图所示:百度搜索页点击立即注册后,会弹出注册账号页面。

脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
package com.test.api;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
/**
 * 多窗口切换
 *
 * @author wangmcn
 *
 */
public class WindowHandles {
       public static void main(String[] args) throws Exception {
              System.setProperty("webdriver.chrome.driver", "D:\\workspace2\\My_Selenium_Demo\\driver\\win\\chromedriver.exe");
              ChromeOptions option = new ChromeOptions();
              option.addArguments("disable-infobars");
              WebDriver driver = new ChromeDriver(option);
              driver.get("https://www.baidu.com");
              driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

              // 获取搜索窗口句柄
              String sreach_windows = driver.getWindowHandle(); 
              driver.findElement(By.linkText("登录")).click();
              driver.findElement(By.linkText("立即注册")).click();

              // 获取所有窗口句柄
              Setall_handles = driver.getWindowHandles();

              // 进入注册窗口页面
              for(String handle : all_handles){
                     if (handle.equals(sreach_windows)==false){
                            // 切换窗口
                            driver.switchTo().window(handle);
                            driver.findElement(By.name("userName")).sendKeys("userName");
                            Thread.sleep(2000);
                     }
              }

              // 进入搜索窗口页面
              for(String handle : all_handles){
                     if (handle.equals(sreach_windows)==true){
                            // 切换窗口
                            driver.switchTo().window(handle);
                            driver.findElement(By.className("close-btn")).click();
                            driver.findElement(By.id("kw")).sendKeys("Selenium");
                            driver.findElement(By.id("su")).click();
                            Thread.sleep(2000);
                     }
              }

              driver.quit();
       }
}

- End -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AllTests软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第1章 浏览器操作
  • 第2章 下拉菜单选择
  • 第3章 鼠标事件
  • 第4章 键盘事件
  • 第5章 元素等待
  • 第6章 多表单切换
  • 第7章 多窗口切换
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档