selenium 安装与API总结
1.配置环境
2.定位页面元素进行操作
3.等待,隐式等待,显示等待
等待
Thread.sleep(3000);
直接让进程等待3秒
隐式等待
webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
这行代码会设置 WebDriver 在查找页面元素时,最多等待10秒钟。
显示等待
WebDriverWait wait = new WebDriverWait(webDriver, 10); // 设置最长等待时间为10秒
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("myElement")));
这段代码会等待直到元素 myElement
可见,最多等待10秒。如果10秒内元素没有出现,则会抛出 TimeoutException
。
4.浏览器页面操作
public class Main {
public static void main(String[] args) throws InterruptedException {
// test01();
test02();
}
private static void test02() throws InterruptedException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
WebDriver webDriver = new EdgeDriver();
//打开百度页面
webDriver.get("https://www.baidu.com/");
//输入 翻译 点击搜索
Thread.sleep(2000);
webDriver.findElement(By.cssSelector("#kw")).sendKeys("我爱你 YYT");
Thread.sleep(4000);
webDriver.findElement(By.cssSelector("#su")).click();
//等待两秒 刷新页面
Thread.sleep(2000);
webDriver.navigate().refresh();
//等待两秒 后退页面
Thread.sleep(2000);
webDriver.navigate().back();
//等待两秒 前进页面
Thread.sleep(2000);
webDriver.navigate().forward();
//等待两秒 使滚动条按照要求滑动
Thread.sleep(2000);
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
//等待两秒 页面最大化
Thread.sleep(2000);
webDriver.manage().window().maximize();
//等待两秒 设置页面大小
Thread.sleep(2000);
webDriver.manage().window().setSize(new Dimension(600,1000));
}
4.1页面刷新
4.2页面后退
4.3页面前进
4.4页面滚动条滑动
控制滚动条的是JS代码
因此需要将类型转换为JS,再输入JS命令:
document.documentElement.scrollTop=10000
属性设置为10000像素。这意味着浏览器窗口会滚动到文档的顶部以下10000像素的位置。如果文档的实际高度小于10000像素,这将导致滚动条滚动到文档的最底部。
4.5页面全屏
4.6设置页面固定大小
5.键盘事件
public class Main {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
// test01();
// test02();
//test03();
// test04(); // 打开b站妍妍酱视频
test05(); // 练习键盘事件
}
private static void test05() throws InterruptedException {
WebDriver webDriver = new EdgeDriver();
// 打开百度页面
webDriver.get("https://www.baidu.com/");
// 输入框输入 521
webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
// 全选输入框的内容 ctrl a
Thread.sleep(2000);
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"a");
// 剪切输入框的内容 ctrl x
Thread.sleep(2000);
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"x");
// 粘贴输入框的内容 ctrl v
Thread.sleep(2000);
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"v");
}
5.1盘输入内容
5.2Ctrl a 全选
5.3Ctrl x 剪切
5.4Ctrl v 粘贴
6.鼠标事件
鼠标事件需要创建一个actions对象 参数是创建的web驱动对象
鼠标事件的操作都需要通过调用actions的方法
6.1移动
6.2拖动
效果如下,图片被拖拽到搜索框后释放,生成了链接
public class Main {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
// test01();
// test02();
//test03();
// test04(); // 打开b站妍妍酱视频
// test05(); // 练习键盘事件
test06(); // 练习鼠标事件
}
private static void test06() throws InterruptedException {
WebDriver webDriver = new EdgeDriver();
// 打开百度页面
webDriver.get("https://www.baidu.com/");
// 输入框输入 521 点击搜索
webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
webDriver.findElement(By.cssSelector("#su")).click();
Thread.sleep(2000);
//-------------------------------------------------------
// 找到图片位置
WebElement webElement01 = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
// 百度搜索框的位置
WebElement webElement02 = webDriver.findElement(By.cssSelector("#kw"));
// 创建action对象
Actions actions = new Actions(webDriver);
// 拖动图片到搜索框里释放
// 第一个参数 被拖拽的元素 第二个参数 释放拖拽元素的位置
actions.dragAndDrop(webElement01,webElement02).perform();
}
6.3右击
public class Main {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
// test01();
// test02();
//test03();
// test04(); // 打开b站妍妍酱视频
// test05(); // 练习键盘事件
test06(); // 练习鼠标事件
}
private static void test06() throws InterruptedException {
WebDriver webDriver = new EdgeDriver();
// 打开百度页面
webDriver.get("https://www.baidu.com/");
// 输入框输入 521 点击搜索
webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
webDriver.findElement(By.cssSelector("#su")).click();
Thread.sleep(2000);
//-------------------------------------------------------
// 找到图片位置
WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
// 创建action对象
Actions actions = new Actions(webDriver);
// 移动鼠标 到 图片 位置 右击操作
actions.moveToElement(webElement).contextClick().perform();
}
6.4双击
7.特殊场景下的操作
7.1 选择框的勾选
因为有多个框需要选择,因此使用了 List 页面元素表来存储
public class Main {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
// test01();
// test02();
//test03();
// test04(); // 打开b站妍妍酱视频
// test05(); // 练习键盘事件
// test06(); // 练习鼠标事件
page01();// 选择框的勾选
}
private static void page01() {
WebDriver webDriver = new EdgeDriver();
webDriver.get("file:\\D:\\软件\\idea\\自动化测试\\selenium脚本\\selenium01\\selenium01\\src\\main\\Page\\test01.html");
// 等待页面元素都渲染出来 等待3秒
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
List<WebElement> webElementList = webDriver.findElements(By.cssSelector("input"));
for (int i = 0; i < webElementList.size(); i++) {
// 通过getAttribute获取元素对应属性的值,type就是一个属性
if (webElementList.get(i).getAttribute("type").equals("radio")){
webElementList.get(i).click();
}
}
}
7.2 多重框架或窗口重叠下的操作
public class Main {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
// test01();
// test02();
//test03();
// test04(); // 打开b站妍妍酱视频
// test05(); // 练习键盘事件
// test06(); // 练习鼠标事件
// page01();// 选择框的勾选
page02(); // 多重框架或窗口重叠下的操作 实现点击到click按钮
}
private static void page02() {
WebDriver webDriver = new EdgeDriver();
webDriver.get("file://D:\\软件\\idea\\自动化测试\\selenium脚本\\selenium01\\selenium01\\src\\main\\Page\\test02.html");
// 找到 f1 框架中的 click 按钮
webDriver.switchTo().frame("f1");
webDriver.findElement(By.cssSelector("body > div > div > a")).click();
}
如果没有这行定位框架代码的话,会报错: 无法定位到该元素
7.3 下拉框的选择
需要创建select对象,有两种选择方式
实现选择第三个选项
public class Main {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
// test01();
// test02();
//test03();
// test04(); // 打开b站妍妍酱视频
// test05(); // 练习键盘事件
// test06(); // 练习鼠标事件
// page01();// 选择框的勾选
// page02(); // 多重框架或窗口重叠下的操作 实现点击到click按钮
page03(); // 下拉框选项的选择操作
}
private static void page03() {
WebDriver webDriver = new EdgeDriver();
webDriver.get("file:\\D:\\软件\\idea\\自动化测试\\selenium脚本\\selenium01\\selenium01\\src\\main\\Page\\test03.html");
// 定位到下拉框 元素
WebElement element = webDriver.findElement(By.cssSelector("#ShippingMethod"));
// 创建select对象 将下拉框元素放进去
Select select = new Select(element);
// 通过下标选择选项 ( 下标从0开始 )
select.selectByIndex(2);
// 通过选项的 value 来选择
// select.selectByValue("7.45");
}
7.4弹窗alert的操作
需要用到switchTo切换到弹窗框架
public class Main {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
// test01();
// test02();
//test03();
// test04(); // 打开b站妍妍酱视频
// test05(); // 练习键盘事件
// test06(); // 练习鼠标事件
// page01();// 选择框的勾选
// page02(); // 多重框架或窗口重叠下的操作 实现点击到click按钮
// page03(); // 下拉框选项的选择操作
page04(); //
}
private static void page04() throws InterruptedException {
WebDriver webDriver = new EdgeDriver();
webDriver.get("file:\\D:\\软件\\idea\\自动化测试\\selenium脚本\\selenium01\\selenium01\\src\\main\\Page\\test04.html");
Thread.sleep(2000);
webDriver.findElement(By.cssSelector("button")).click();
Thread.sleep(2000);
// 取消弹窗
webDriver.switchTo().alert().dismiss();
Thread.sleep(2000);
webDriver.findElement(By.cssSelector("button")).click();
Thread.sleep(2000);
// 在弹窗输入内容
webDriver.switchTo().alert().sendKeys("520yyt");
Thread.sleep(2000);
// 提交弹窗
webDriver.switchTo().alert().accept();
}
7.5文件上传的操作
public class Main {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
// test01();
// test02();
//test03();
// test04(); // 打开b站妍妍酱视频
// test05(); // 练习键盘事件
// test06(); // 练习鼠标事件
// page01();// 选择框的勾选
// page02(); // 多重框架或窗口重叠下的操作 实现点击到click按钮
// page03(); // 下拉框选项的选择操作
// page04(); // 弹窗操作
page05(); // 上传文件操作
}
private static void page05() {
WebDriver webDriver = new EdgeDriver();
webDriver.get("file:\\D:\\软件\\idea\\自动化测试\\selenium脚本\\selenium01\\selenium01\\src\\main\\Page\\test05.html");
webDriver.findElement(By.cssSelector("input")).sendKeys("D:\\临时垃圾\\实验报告\\软件测试\\直方图.png");
}
7.6 页面退出 关闭
-
quit()
方法:- 调用
quit()
会关闭所有的浏览器窗口,并结束 WebDriver 会话。 - 这个方法通常用于彻底结束测试,释放所有资源,包括关闭浏览器窗口和结束浏览器进程。
quit()
还会确保 WebDriver 的资源被释放,比如网络连接和文件句柄。- 一旦调用了
quit()
,相关的 WebDriver 实例就不能再被使用了。
- 调用
WebDriver driver = new ChromeDriver();
try {
driver.get("http://www.example.com");
// 进行一些操作
} finally {
driver.quit(); // 关闭所有窗口,结束会话
}
-
close()
方法:- 调用
close()
会关闭当前的浏览器窗口,但不会结束 WebDriver 会话。 - 如果你打开了多个标签页或窗口,
close()
只会关闭当前活动的窗口或标签页。 - 这个方法不会关闭其他打开的窗口或标签页,也不会结束 WebDriver 会话。
- 你可以在调用
close()
后继续使用同一个 WebDriver 实例来打开新的窗口或标签页。
WebDriver driver = new ChromeDriver(); try { driver.get("http://www.example.com"); // 打开新的窗口 driver.switchTo().newWindow(WindowType.TAB); driver.get("http://www.example.com"); driver.close(); // 关闭当前窗口,但不会结束会话 driver.get("http://www.google.com"); // 继续使用同一个实例 } finally { driver.quit(); // 最后结束会话 }
- 调用
总结
quit()
:彻底结束测试,关闭所有窗口,释放所有资源。close()
:关闭当前窗口,但可以继续使用 WebDriver 实例进行其他操作。
在实际使用中,通常在测试结束时调用 quit()
来确保所有资源被释放,而在测试过程中需要关闭当前窗口时使用 close()
。
7.7切换窗口
每当有跳转打开一个新页面时,就应该用到这行代码,不然会报错: 无法定位到该元素
public class Main {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
// test01();
// test02();
//test03();
// test04(); // 打开b站妍妍酱视频
// test05(); // 练习键盘事件
// test06(); // 练习鼠标事件
// page01();// 选择框的勾选
// page02(); // 多重框架或窗口重叠下的操作 实现点击到click按钮
// page03(); // 下拉框选项的选择操作
// page04(); // 弹窗操作
// page05(); // 上传文件操作
page06(); // 切换窗口操作
}
private static void page06() throws InterruptedException {
WebDriver webDriver = new EdgeDriver();
webDriver.get("https://www.baidu.com/");
webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
Thread.sleep(2000);
// 获取所有的窗口句柄
Set<String> handles = webDriver.getWindowHandles();
String target_handle = "";
// 获取最新的窗口句柄
for(String handle : handles){
target_handle = handle;
}
// 切换到当前窗口
webDriver.switchTo().window(target_handle);
webDriver.findElement(By.cssSelector("#ww")).sendKeys("翻译");
webDriver.findElement(By.cssSelector("s_btn_wr")).click();
}
7.8截图
实现截图功能需要添加maven依赖
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
文件地址的最后不要忘了给文件命名,不然会报错如下
public class Main {
public static void main(String[] args) throws InterruptedException, IOException {
System.setProperty("webdriver.edge.driver", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedgedriver.exe");
// test01();
// test02();
//test03();
// test04(); // 打开b站妍妍酱视频
// test05(); // 练习键盘事件
// test06(); // 练习鼠标事件
// page01();// 选择框的勾选
// page02(); // 多重框架或窗口重叠下的操作 实现点击到click按钮
// page03(); // 下拉框选项的选择操作
// page04(); // 弹窗操作
// page05(); // 上传文件操作
// page06(); // 切换窗口操作
page07(); // 截图 操作
}
private static void page07() throws IOException {
WebDriver webDriver = new EdgeDriver();
webDriver.get("https://www.baidu.com/");
File file = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(file,new File("D:\\临时垃圾\\作业临时照片\\测试截图\\截图.png"));
}
原文地址:https://blog.csdn.net/weixin_60257917/article/details/140464379
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!