[跟着官方文档学Selenium][学习笔记][五][WebDriver的浏览器]
从浏览器中获取当前页面的标题
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
public class getInformation
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("https://www.baidu.com/");
String title = webDriver.getTitle();
System.out.println(title);//百度一下,你就知道
}
}
从浏览器的地址栏读取当前的 URL
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
public class getInformation
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("https://www.baidu.com/");
String currentUrl = webDriver.getCurrentUrl();
System.out.println(currentUrl);//https://www.baidu.com/
}
}
导航
打开网站
启动浏览器后要做的第一件事就是打开网站,代码示例如下:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class openWebsite
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
//简便方法
webDriver.get("https://selenium.dev");
//更长方法
webDriver.navigate().to("https://selenium.dev");
}
}
后退
按下浏览器的后退按钮
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class browserBack
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("https://selenium.dev");
System.out.println("打开了Selenium主页");
webDriver.get("https://www.baidu.com/");
System.out.println("打开了百度主页");
webDriver.navigate().back();
System.out.println("回退到Selenium主页");
webDriver.quit();
}
}
前进
按下浏览器的前进按钮
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class browserForward
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("https://www.baidu.com/");
System.out.println("打开了百度主页");
webDriver.get("https://cn.bing.com");
System.out.println("打开了必应主页");
webDriver.navigate().back();
System.out.println("回退到百度主页");
webDriver.navigate().forward();;
System.out.println("前进到必应主页");
webDriver.quit();
}
}
刷新
刷新当前页面
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class browserRefresh
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("http://www.baidu.com/");
System.out.println("打开了百度主页");
webDriver.navigate().refresh();
System.out.println("刷新了百度主页");
webDriver.quit();
}
}
警告框
WebDriver提供了一个API,用于处理JavaScript提供的三种类型的原生弹窗消息。这些弹窗由浏览器提供限定的样式。
注意:新手笨方法,写一条代码就运行一次Selenium测一条。
Alerts警告框
其中最基本的称为警告框,它显示一条自定义的消息,以及一个用于关闭警告的按钮,在大多数浏览器中标记为"确定"(OK)。在大多数浏览器中,也可以通过按"关闭"(Close)按钮将其关闭,但始终和"确定"按钮具有相同功能。
WebDriver可以从弹窗获取文本并接受或关闭这些警告。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Alerts</title>
</head>
<body>
<a onclick='window.alert("Sample alert")'>See an example alert</a>
</body>
</html>
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
public class alertsDemo1
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
//打开本地的html文件要采用绝对路径
webDriver.get("XXX\\alertsDemo1.html");
//打开html文件后点击链接触发警告
webDriver.findElement(By.linkText("See an example alert")).click();
//等待警告框显示并将它存入一个变量
Alert alert = new WebDriverWait(webDriver, Duration.ofSeconds(5)).until(ExpectedConditions.alertIsPresent());
//将警告文本存入变量
String text = alert.getText();
//按下确定按钮
alert.accept();
//控制台输出信息
System.out.println("警告框内容为:"+text);//警告框内容为:Sample alert
System.out.println("完成操作");//完成操作
webDriver.quit();
}
}
Confirm确认框
确认框类似于警告框,不同之处在于用户还可以选择取消消息。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Confirm</title>
</head>
<body>
<a onclick='window.confirm("Sample confirm")'>See a sample confirm</a>
</body>
</html>
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class alertsDemo2
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
//打开本地的html文件要采用绝对路径
webDriver.get("XXX\\alertsDemo2.html");
//打开html文件后点击链接触发警告
webDriver.findElement(By.linkText("See a sample confirm")).click();
//等待警告框显示
new WebDriverWait(webDriver, Duration.ofSeconds(5)).until(ExpectedConditions.alertIsPresent());
//将警告存入变量
Alert alert = webDriver.switchTo().alert();
//将警告保存以便复用
String text = alert.getText();
//按下取消按钮
alert.dismiss();
//控制台输出信息
System.out.println("警告框内容为:" + text);//警告框内容为:Sample alert
System.out.println("完成操作");//完成操作
webDriver.quit();
}
}
Prompt提示框
提示框与确认框类似,不同之处在于它们还包括文本输入。与处理表单元素类似,可以使用WebDriver
的sendKeys
来填写响应。这将完全替换占位符文本。按下取消按钮不会提交任何文本。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Confirm</title>
</head>
<body>
<a onclick='window.prompt("Sample prompt")'>See a sample prompt</a>
</body>
</html>
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
public class alertsDemo3
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
//打开本地的html文件要采用绝对路径
webDriver.get("XXX\\alertsDemo3.html");
//打开html文件后点击链接触发警告
webDriver.findElement(By.linkText("See a sample prompt")).click();
//等待警告框显示并保存它到一个变量
Alert alert = new WebDriverWait(webDriver, Duration.ofSeconds(5)).until(ExpectedConditions.alertIsPresent());
//输入信息
alert.sendKeys("Selenium");
//按下确定按钮
alert.accept();
//控制台输出信息
System.out.println("完成操作");//完成操作
webDriver.quit();
}
}
Cookies
Cookie是从网站发送并存储在计算机中的一小段数据。Cookies主要用于识别用户并加载存储的信息。
WebDriver API提供了一种使用内置的方法与Cookie进行交互。
添加Cookie
这个方法常常用于将cookie添加到当前访问的上下文中。添加Cookie仅接受一组已定义的可序列化JSON对象。
首先,你需要位于有效Cookie的域上。如果你在开始与网站进行交互之前尝试预设cookie,并且你的首页很大或需要一段时间才能加载完毕,则可以选择在网站上找到一个较小的页面(通常404页很小,例如 http://example.com/some404page)
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class addCookie
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
try
{
webDriver.get("http://www.example.com");
//添加到cookie到浏览器上下文
webDriver.manage().addCookie(new Cookie("key", "value"));
}
finally
{
webDriver.quit();
}
}
}
获取命名的Cookie
这个方法返回与cookie名称匹配的序列化cookie数据中所有关联的cookie
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class getCookieNamed
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
try
{
webDriver.get("http://www.example.com");
webDriver.manage().addCookie(new Cookie("foo", "bar"));
//获取名字为foo的cookie信息
Cookie cookie = webDriver.manage().getCookieNamed("foo");
System.out.println(cookie);//foo=bar; path=/; domain=www.example.com
}
finally
{
webDriver.quit();
}
}
}
获取全部Cookies
此方法会针对当前访问上下文返回"成功的序列化cookie数据"。如果浏览器不再可用,则返回错误。
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import java.util.Set;
public class getAllCookies
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
try
{
webDriver.get("http://www.example.com");
//加入cookies
webDriver.manage().addCookie(new Cookie("test1", "cookie1"));
webDriver.manage().addCookie(new Cookie("test2", "cookie2"));
//获取所有cookies
Set<Cookie> cookies = webDriver.manage().getCookies();
System.out.println(cookies);
}
finally
{
webDriver.quit();
}
}
}
删除Cookie
此方法删除与提供的cookie名称匹配的cookie数据
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class deleteCookie
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
try
{
webDriver.get("http://www.example.com");
webDriver.manage().addCookie(new Cookie("test1", "cookie1"));
Cookie cookie = new Cookie("test2", "cookie2");
webDriver.manage().addCookie(cookie);
//删除名为test1的cookie
webDriver.manage().deleteCookieNamed("test1");
/*
* Selenium Java绑定也提供了一种通过传递当前浏览上下文的cookie对象来删除cookie的方法
* */
webDriver.manage().deleteCookie(cookie);
}
finally
{
webDriver.quit();
}
}
}
删除所有Cookies
此方法删除当前访问上下文的所有cookie
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class deleteAllCookies
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
try
{
webDriver.get("http://www.example.com");
webDriver.manage().addCookie(new Cookie("test1", "cookie1"));
webDriver.manage().addCookie(new Cookie("test2", "cookie2"));
//删除所有cookie
webDriver.manage().deleteAllCookies();
}
finally
{
webDriver.quit();
}
}
}
Same-Site Cookie属性
此属性允许用户引导浏览器控制cookie,是否与第三方站点发起的请求一起发送。引入其是为了防止CSRF(跨站请求伪造)攻击。
Same-Site Cookie属性接受Strict和Lax两种参数作为指令。
Strict:
当sameSite
属性设置为Strict,cookie不会与来自第三方网站的请求一起发送。
Lax:
当你将cookie sameSite属性设置为Lax,cookie将与第三方网站发起的GET请求一起发送。
注意:到目前为止,这个功能在Chrome(80+版本),Firefox(79+版本)中提供,并适用于Selenium 4及更高版本。
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class cookieTest
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
try
{
webDriver.get("http://www.example.com");
Cookie cookie=new Cookie.Builder("key","value").sameSite("Strict").build();
Cookie cookie1 = new Cookie.Builder("key", "value").sameSite("Lax").build();
webDriver.manage().addCookie(cookie);
webDriver.manage().addCookie(cookie1);
System.out.println(cookie.getSameSite());//Strict
System.out.println(cookie1.getSameSite());//Lax
}
finally
{
webDriver.quit();
}
}
}
Frames
框架是一种现在已被弃用的方法,用于从同一域中的多个文档构建站点布局。除非你使用的是 HTML5之前的webapp,内嵌框架允许插入来自完全不同领域的文档,并且仍然经常使用。
如果您需要使用框架或iframe,WebDriver允许您以相同的方式使用它们。考虑 iframe 中的一个按钮。 如果我们使用浏览器开发工具检查元素,我们可能会看到以下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>frames</title>
</head>
<body>
<div id="modal">
<iframe id="buttonframe" name="myframe">
<button>Click here</button>
</iframe>
</div>
</body>
</html>
如果不是iframe,可以使用如下方式点击按钮:
driver.fineElement(By.tagName("button")).click();
但是,如果iframe之外没有按钮,那么可能会得到一个no such element
的错误。这是因为Selenium只知道顶层文档中的元素。为了与按钮进行交互,我们首先需要切换到框架,这与切换窗口类似。WebDriver提供了三种切换方法。
使用WebElement
使用 WebElement 进行切换是最灵活的选择。您可以使用首选的选择器找到框架并切换到它。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>frames</title>
</head>
<body>
<div id="modal">
<iframe id="buttonframe" name="myframe" src="https://seleniumhq.github.io">
<button>Click here</button>
</iframe>
</div>
</body>
</html>
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import org.w3c.dom.Text;
public class framesTest
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("XXX\\framesTest.html");
//WebElement element = webDriver.findElement(By.tagName("button"));//找不到
//存储网页元素
WebElement iframe = webDriver.findElement(By.cssSelector("#modal>iframe"));
//切换到frame
webDriver.switchTo().frame(iframe);
//点击按钮
webDriver.findElement(By.tagName("button")).click();
}
}
使用name或id
如果frame或iframe具有id或name属性,可以使用该属性。如果名称或id在页面上不是唯一的,那么将切换到找到的第一个。
// 使用 ID
driver.switchTo().frame("buttonframe");
// 或者使用 name 代替
driver.switchTo().frame("myframe");
// 现在可以点击按钮
driver.findElement(By.tagName("button")).click();
使用索引
还可以使用frame的索引,例如可以使用JavaScript中的window.frames进行查询
//切换到第2个框架
driver.switchTo().frame(1);
离开框架
离开iframe或者frameset,切换回默认内容
//回到顶层
driver.switchTo().defaultContent();
窗口
窗口和标签页
WebDriver没有区分窗口和标签页。如果打开了一个新标签页或窗口,Selenium将允许你使用窗口句柄来处理它。每个窗口都有一个唯一的标识符,该标识符在单个会话中保持持久性。可以使用driver.getWindowHandle();
获得当前窗口的句柄
切换窗口或标签页
单击在<a href="https://seleniumhq.github.io" target="_blank">
新窗口中打开链接,则屏幕会聚焦在新窗口或新标签上,但WebDriver不知道操作系统认为哪个窗口是活动的。要使用新窗口,需要切换到它。如果只有两个选项卡或窗口被打开,并且你知道从哪个窗口开始,则你可以遍历WebDriver,通过排除法可以看到两个窗口或选项卡,然后切换到你需要的窗口或选项卡。
Selenium 4提供了一个新的API,NewWindow,它创建一个新的选项卡或窗口并自动切换到它。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>switch</title>
</head>
<body>
<a href="https://seleniumhq.github.io" target="_blank">new window</a>
</body>
</html>
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.FluentWait;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
public class switchWindow
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("XXX\\switchWindow.html");
//存储原始窗口的ID
String originalWindow = webDriver.getWindowHandle();
//检查一下有没有打开其他窗口
assert webDriver.getWindowHandles().size() == 1;
//点击在新窗口中打开的链接
webDriver.findElement(By.linkText("new window")).click();
//等待新窗口或标签页
Wait<WebDriver> wait = new FluentWait<WebDriver>(webDriver);
wait.until(ExpectedConditions.numberOfWindowsToBe(2));
//循环执行,直到找到一个新的窗口句柄
for (String windowHandle : webDriver.getWindowHandles())
{
if (!originalWindow.contentEquals(windowHandle))
{
webDriver.switchTo().window(windowHandle);
break;
}
}
//等待新标签完成加载内容
Boolean seleniumTitle = wait.until(ExpectedConditions.titleIs("Selenium"));
if (seleniumTitle)
{
System.out.println("找到标题");
}
else
{
System.out.println("没有找到标题");
}
}
}
创建新窗口或新标签页并且切换
创建一个新窗口或标签页,屏幕焦点将聚焦在新窗口或标签上。你不需要切换到新窗口或标签。如果除了新窗口之外,你打开了两个以上的窗口或标签页,可以通过遍历WebDriver看到两个窗口或选项卡,并切换到非原始窗口。
注意:该特性适用于Selenium 4及其后续版本。
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.edge.EdgeDriver;
public class switchNewWindow
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("https://www.baidu.com");
//打开新标签页并切换到新标签页
//webDriver.switchTo().newWindow(WindowType.TAB);
//打开一个新窗口并切换到新窗口
webDriver.switchTo().newWindow(WindowType.WINDOW);
}
}
关闭窗口或标签页
当你完成了一个窗口或标签页的工作时,并且它不是浏览器中最后一个打开的窗口或标签页时,应该关闭它并切换回你之前使用的窗口。以上一节代码示例为例,将把前一个窗口句柄存储在一个变量中。如果在关闭一个窗口后忘记切换到另一个窗口句柄,WebDriver将在当前关闭的页面上执行,并触发一个No Such Window Exception
无此窗口异常。必须切换回有效的窗口句柄才能继续执行。
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.edge.EdgeDriver;
public class closeWindow
{
public static void main(String[] args)
{
/*
* 切换标签页
* */
/*WebDriver webDriver = new EdgeDriver();
webDriver.get("https://www.baidu.com");
//存储原始窗口的ID
String originalWindow = webDriver.getWindowHandle();
//打开新标签页
webDriver.switchTo().newWindow(WindowType.TAB);
webDriver.get("https://www.baidu.com");
//关闭标签页
webDriver.close();
//切回之前的标签页
webDriver.switchTo().window(originalWindow);*/
/*
* 切换窗口
* */
WebDriver webDriver = new EdgeDriver();
webDriver.get("https://www.baidu.com");
//存储原始窗口的ID
String originalWindow = webDriver.getWindowHandle();
//打开新窗口
webDriver.switchTo().newWindow(WindowType.WINDOW);
webDriver.get("https://www.baidu.com");
//关闭窗口
webDriver.close();
//切回之前的窗口
webDriver.switchTo().window(originalWindow);
}
}
在会话结束时退出浏览器
当你完成了浏览器会话,应该调用quit退出,而不是close关闭,driver.quit();
- 退出将会:
- 关闭所有与WebDriver会话相关的窗口和选项卡
- 结束浏览器进程
- 结束后台驱动进程
- 通知Selenium Grid浏览器不再使用,以便可以由另一个会话使用它(如果你正在使用Selenium Grid)
调用quit()
失败将留下额外的后台进程和端口运行在机器上,这可能在以后导致一些问题。
有的测试框架提供了一些方法和注释,可以在测试结束时放入teardown()
方法中。
@AfterAll
public static void tearDown()
{
driver.quit();
}
如果不在测试上下文中运行WebDriver,可以考虑使用try/finally
,这是大多数语言都提供的,这样一个异常处理仍然可以清理WebDriver会话。
try
{
//WebDriver代码
}
finally
{
driver.quit();
}
Python的WebDriver现在支持Python上下文管理器,当使用with关键字时,可以在执行结束时自动退出驱动程序。
with webdriver.Edge() as driver:
# WebDriver代码
#在此缩进位置后WebDriver自动退出
窗口管理
屏幕分辨率会影响web应用程序的呈现方式,因为WebDriver提供了移动和调整浏览器窗口大小的机制。
获取窗口大小
获取浏览器窗口的大小(以像素为单位)
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class getWindowSize
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
//分别获取每个尺寸
// int width = webDriver.manage().window().getSize().getWidth();
// int height = webDriver.manage().window().getSize().getHeight();
// System.out.println("宽为:" + width);//宽为:945
// System.out.println("高为:" + height);//高为:1020
//或者存储尺寸并在以后查询它们
Dimension size = webDriver.manage().window().getSize();
int width1 = size.getWidth();
int height1 = size.getHeight();
System.out.println("宽为:" + width1);//宽为:945
System.out.println("高为:" + height1);//高为:1020
}
}
设置窗口大小
恢复窗口并设置窗口大小
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class setWindowSize
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.manage().window().setSize(new Dimension(1024, 768));
}
}
得到窗口位置
获取浏览器窗口左上角的坐标
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class getWindowLocation
{
public static void main(String[] args)
{
//分别获取每个尺寸
WebDriver webDriver = new EdgeDriver();
int x = webDriver.manage().window().getPosition().getX();
int y = webDriver.manage().window().getPosition().getY();
System.out.println("x = " + x);
System.out.println("y = " + y);
//或者存储尺寸并在以后查询它们
Point position = webDriver.manage().window().getPosition();
int x1 = position.getX();
int y1 = position.getY();
System.out.println("x = " + x);
System.out.println("y = " + y);
}
}
设置窗口位置
将窗口移动到指定位置
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class moveWindow
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
//将窗口移动到主显示器的左上角
webDriver.manage().window().setPosition(new Point(0,0));
}
}
最大化窗口
扩大窗口,对于大多数操作系统,窗口将填满屏幕,而不会阻挡操作系统自己的菜单和工具栏
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class maxWindow
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.manage().window().maximize();
}
}
最小化窗口
最小化当前浏览上下文的窗口,这种命令的精确行为将作用于各个特定的窗口管理器。
最下化窗口通常将窗口隐藏在系统托盘中。注意:此功能用于Selenium 4以及更高版本。
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class minWindow
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.manage().window().minimize();
}
}
全屏窗口
填充整个屏幕,类似于在大多数浏览器中按下F11
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
public class fullScreenWindow
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.manage().window().fullscreen();
}
}
屏幕截图
用于捕获当前浏览上下文的屏幕截图。WebDriver的屏幕截图返回以Base64格式编码的屏幕截图。
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import java.io.File;
import java.io.IOException;
public class SeleniumTakeScreenshot
{
public static void main(String[] args) throws IOException
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("http://www.example.com");
File scrFile = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
/*
* 需要导包
* <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
* */
FileUtils.copyFile(scrFile, new File("./image.png"));
webDriver.quit();
}
}
img1
元素屏幕截图
用于捕获当前浏览上下文的元素的屏幕截图。WebDriver屏幕截图以Base64格式编码的屏幕截图。
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import java.io.File;
import java.io.IOException;
public class SeleniumelementTakeScreenshot
{
public static void main(String[] args) throws IOException
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("http://www.example.com");
WebElement element = webDriver.findElement(By.cssSelector("h1"));
File scrFile = element.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("./image.png"));
webDriver.quit();
}
}
img2
执行脚本
在当前frame或者窗口的上下文中,执行JavaScript代码片段
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
<button name="btnLogin">登陆还是登录</button>
</body>
</html>
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
public class SeleniumJavaScript
{
public static void main(String[] args)
{
//实例化WebDriver并指定驱动为Edge浏览器
WebDriver webDriver = new EdgeDriver();
//打开页面
webDriver.get("XXX\\SeleniumJavaScript.html");
//创建JavaScriptExecutor
JavascriptExecutor js = (JavascriptExecutor) webDriver;
//Button元素
WebElement button = webDriver.findElement(By.name("btnLogin"));
//执行JavaScript点击元素
js.executeScript("arguments[0].click();", button);
//从script获取返回值
String text = (String) js.executeScript("return arguments[0].innerText", button);
System.out.println("返回值为:"+text);//返回值为:登陆还是登录
//直接执行JavaScript
js.executeScript("console.log('hello world')");
}
}
img3
打印页面
打印当前浏览器内的页面
注意:此功能需要浏览器工作在headless mode
import org.openqa.selenium.Pdf;
import org.openqa.selenium.PrintsPage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.print.PrintOptions;
public class printPage
{
public static void main(String[] args)
{
//实例化WebDriver,驱动为Edge
WebDriver webDriver = new EdgeDriver();
webDriver.get("https://www.selenium.dev");
PrintsPage printer = (PrintsPage) webDriver;
PrintOptions printOptions = new PrintOptions();
printOptions.setPageRanges("1-2");
Pdf pdf = printer.print(printOptions);
String content = pdf.getContent();
}
}
- 点赞
- 收藏
- 关注作者
评论(0)