> 技术文档 > Selenium-Java版(实战技巧)_java selenium

Selenium-Java版(实战技巧)_java selenium

实战技巧

前言

其他操控元素方法 

冻结界面 

问题

解决 

弹出对话框 

Alert 

Confirm 

Prompt 

其他技巧 

窗口大小 

获取当前窗口标题 

获取当前窗口URL地址 

截屏 


前言

参考教程:Python + Selenium Web自动化 2024版 - 自动化测试 爬虫_哔哩哔哩_bilibili

上期文章:Selenium-Java版(选择框)-CSDN博客

其他操控元素方法 

Selenium提供的Actions类来实现鼠标右键点击、双击、移动鼠标到某个元素、鼠标拖拽等操作。

示例:移动鼠标使用光标停留到某个元素上

运行代码

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.edge.EdgeDriver;import org.openqa.selenium.interactions.Actions;import java.time.Duration;import java.util.Scanner;public class Main { public static void main(String[] args) { // 创建WebDriver对象 WebDriver driver = new EdgeDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); // 打开百度首页 driver.get(\"https://www.baidu.com/\"); // 创建一个Actions对象来处理鼠标操作 Actions ac = new Actions(driver); // 找到需要移动鼠标到的元素 WebElement element = driver.findElement(By.cssSelector(\"span#s-usersetting-top\")); // 移动鼠标到该元素上 ac.moveToElement(element).perform(); // 创建Scanner对象等待用户输入 Scanner scanner = new Scanner(System.in); System.out.println(\"等待回车键结束程序\"); scanner.next(); // 关闭浏览器 driver.quit(); }}

自动打开了浏览器并出现设置的下拉选项

冻结界面 

问题

光标放在设置上面会有弹出框

当鼠标从搜索设置上移开,这个栏目就整个消失, 就没法获取搜索设置这个元素的HTML

解决 

开发者工具栏console 里面执行如下js代码 

setTimeout(function(){debugger}, 5000)

在5000毫秒后,执行debugger命令,浏览器会进入debug状态。界面被冻住,此时点击界面不会触发事件。

所以在输入代码并回车后,立即将鼠标放在设置处。弹出搜索设置等元素的内容。等待5秒到了以后,界面被冻住。就可以点击开发者工具栏的查看箭头,查看其属性了。

弹出对话框 

Alert 

只有OK按钮 

模拟用户点击OK按钮 

driver.switchTo().alert().accept()

获取弹出对话框中的信息内容 

driver.switchTo().alert().getText()

示例

运行代码

import org.openqa.selenium.Alert;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.edge.EdgeDriver;import java.time.Duration;import java.util.Scanner;public class Main { public static void main(String[] args) { // 创建WebDriver对象 WebDriver driver = new EdgeDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); // 打开测试页面 driver.get(\"https://www.byhy.net/cdn2/files/selenium/test4.html\"); // 找到ID为\'b1\'的元素并点击 WebElement button = driver.findElement(By.id(\"b1\")); button.click(); // 切换到弹出框并打印提示信息 Alert alert = driver.switchTo().alert(); System.out.println(alert.getText()); // 点击OK按钮 alert.accept(); // 创建Scanner对象等待用户输入 Scanner scanner = new Scanner(System.in); System.out.println(\"等待回车键结束程序\"); scanner.next(); // 关闭浏览器 driver.quit(); }}

浏览器自动打开弹出alert对话框后又立即消失

运行框打印了对话框中的信息内容

Confirm 

又OK和Cancel两个按钮 

点击OK按钮 

driver.switchTo().alert().accept()

点击Cancel按钮 

driver.switchTo().alert().dismiss()

示例

运行代码

import org.openqa.selenium.Alert;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.edge.EdgeDriver;import java.time.Duration;import java.util.Scanner;public class Main { public static void main(String[] args) { // 创建WebDriver对象 WebDriver driver = new EdgeDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); // 打开测试页面 driver.get(\"https://www.byhy.net/cdn2/files/selenium/test4.html\"); // --- 第一次点击 OK 按钮 --- // 找到ID为\'b2\'的元素并点击 WebElement button = driver.findElement(By.id(\"b2\")); button.click(); // 切换到弹出框并打印提示信息 Alert alert = driver.switchTo().alert(); System.out.println(alert.getText()); // 点击OK按钮 alert.accept(); // --- 第二次点击 取消 按钮 --- // 再次找到ID为\'b2\'的元素并点击 button = driver.findElement(By.id(\"b2\")); button.click(); // 再次切换到弹出框并打印提示信息 alert = driver.switchTo().alert(); System.out.println(alert.getText()); // 点击取消按钮(dismiss) alert.dismiss(); // 创建Scanner对象等待用户输入 Scanner scanner = new Scanner(System.in); System.out.println(\"等待回车键结束程序\"); scanner.next(); // 关闭浏览器 driver.quit(); }}

Prompt 

需要用户输入一些信息 

方法

driver.switchTo().alert().sendKeys()

示例

运行代码 

import org.openqa.selenium.Alert;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.edge.EdgeDriver;import java.time.Duration;import java.util.Scanner;public class Main { public static void main(String[] args) { // 创建WebDriver对象 WebDriver driver = new EdgeDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); // 打开测试页面 driver.get(\"https://www.byhy.net/cdn2/files/selenium/test4.html\"); // --- prompt --- // 点击按钮 WebElement button = driver.findElement(By.id(\"b3\")); button.click(); // 获取alert对象 Alert alert = driver.switchTo().alert(); // 打印提示信息 System.out.println(alert.getText()); // 输入信息并点击OK alert.sendKeys(\"web自动化 - selenium\"); alert.accept(); // 再次点击按钮 button = driver.findElement(By.id(\"b3\")); button.click(); // 获取alert对象 alert = driver.switchTo().alert(); // 点击Cancel取消 alert.dismiss(); // 创建Scanner对象等待用户输入 Scanner scanner = new Scanner(System.in); System.out.println(\"等待回车键结束程序\"); scanner.next(); // 关闭浏览器 driver.quit(); }}

其他技巧 

窗口大小 

获取窗口大小

// 获取窗口尺寸Dimension windowSize = driver.manage().window().getSize();int width = windowSize.getWidth(); // 获取宽度int height = windowSize.getHeight(); // 获取高度

改变窗口大小 

// 设置窗口尺寸为 x 宽度和 y 高度driver.manage().window().setSize(new Dimension(x, y));

获取当前窗口标题 

// 获取页面标题String pageTitle = driver.getTitle();

获取当前窗口URL地址 

// 获取当前页面URLString currentUrl = driver.getCurrentUrl();

截屏 

首先要在maven仓库添加commons-io库的依赖

   commons-io commons-io 2.11.0 

 示例

运行代码

import org.openqa.selenium.*;import org.openqa.selenium.edge.EdgeDriver;import java.io.File;import org.apache.commons.io.FileUtils;import java.io.IOException;import java.time.Duration;import java.util.Scanner;public class Main { public static void main(String[] args) { // 创建WebDriver对象 WebDriver driver = new EdgeDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); // 打开百度网站 driver.get(\"https://www.baidu.com/\"); // 截取屏幕并保存为图片 File screenshotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); try { // 将截取的屏幕保存为图片文件 FileUtils.copyFile(screenshotFile, new File(\"1.png\")); } catch (IOException e) { e.printStackTrace(); } // 创建Scanner对象等待用户输入 Scanner scanner = new Scanner(System.in); System.out.println(\"等待回车键结束程序\"); scanner.next(); // 关闭浏览器 driver.quit(); }}

查看项目的根目录