1 pom依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>4.9.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>4.9.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>4.9.1</version>
</dependency>
驱动下载地址:
https://registry.npmmirror.com/binary.html?path=chromedriver
2 简单实例运行
根据浏览器版本下载对应的驱动本次chrome 版本115 所以下载115版本的驱动
package cn.com.ge.apm.test;
import org.openqa.selenium.chrome.ChromeDriver;
public class FirstWebTest {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","C:/zk/hj/chromedirver/chromedriver.exe");
ChromeDriver chromeDriver = new ChromeDriver();
chromeDriver.get("https://www.baidu.com");
}
}
2 元素定位
package cn.com.ge.apm.test;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
public class ElementLocate {
private static ChromeDriver chromeDriver;
public static void main(String[] args) {
openChrome();
//1.定位到baidu的搜索框元素并且输入数据 通过id定位
// chromeDriver.findElement(By.id("kw")).sendKeys("年龄大不能搬砖了么");
//2.定位到baidu的搜索框元素并且输入数据 通过Name定位 --可能会重复
// chromeDriver.findElement(By.name("wd")).sendKeys("年龄大不能搬砖了么");
//3.定位到百度搜索框元素,并且输入数据(tagName) 会找到多个元素 不推荐
// chromeDriver.findElement(By.tagName("input")).sendKeys("年龄大不能搬砖了么");
//4. className定位 到百度的搜索框元素 有多个随便写一个
// chromeDriver.findElement(By.className("s_ipt")).sendKeys("年龄大不能搬砖了么");
//Compound class names not permitted -->复合类名问题 解决:找其中一个必须在当前页面是唯一的
// chromeDriver.findElement(By.className("s_btn")).click();
//5.根据链接的超文本来获取元素
//定位新闻元素点击(linkText定位)只能定位超链接完整文本
// chromeDriver.findElement(By.linkText("新闻")).click();
//6.定位“新闻”元素,并且点击(partialLinkText定位)可以只包含部分
// chromeDriver.findElement(By.partialLinkText("闻")).click();
//7 元素定位 sccSelector
/**
* 根据tagName
* By.cssSelector("input");
*
* 根据id
* By.cssSelector("input#id");
* By.cssSelector("#id");
*
* 根据className(样式名)
* By.cssSelector("className");
* By.cssSelector("input.className");
*/
//cssSelector元素定位
//(1)tagName定位
// chromeDriver.findElement(By.cssSelector("input")).click();
//(2) id定位 前面需要加#号
// chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("年龄大不能搬砖了么");
//(3)className定位 .样式名
// chromeDriver.findElement(By.cssSelector(".s_ipt")).sendKeys("年龄大不能搬砖了么");
//(3.1)符合样式名 前面都需要加.号
// chromeDriver.findElement(By.cssSelector(".bg.s_btn")).click();
//精确定位 可以定位属性值
// chromeDriver.findElement(By.cssSelector("input[maxlength='255']")).sendKeys("年龄大不能搬砖了么");
//多属性 By.cssSelector("标签名[属性1='属性值'][属性2='属性值']")
// chromeDriver.findElement(By.cssSelector("input[maxlength='255'][autocomplete='off']")).sendKeys("年龄大不能搬砖了么");
}
public static void openChrome(){
System.setProperty("webdriver.chrome.driver","C:/zk/hj/chromedirver/chromedriver.exe");
chromeDriver = new ChromeDriver();
chromeDriver.get("https://www.baidu.com");
}
}
By.cssSelector(“标签名[属性1=‘属性值’][属性2=‘属性值’]”) 页面搜索效果
input[maxlength=‘255’][autocomplete=‘off’]
3 元素定位-xpath
一般不使用
3.1 页面搜索元素
//input[@maxlength=‘255’ and @autocomplete=‘off’]
3.2 页面通过文本定位元素
//a[text()=‘新闻’]
3.3 匹配部分的文本值
//a[contains(text(),‘闻’)]
4 元素操作api
4.1 元素操作演示
package cn.com.ge.apm.test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ElementOperate {
private static ChromeDriver chromeDriver;
public static void openChrome(){
System.setProperty("webdriver.chrome.driver","C:/zk/hj/chromedirver/chromedriver.exe");
chromeDriver = new ChromeDriver();
chromeDriver.get("https://www.baidu.com");
}
public static void main(String[] args) {
try {
openChrome();
//1 clear
/*chromeDriver.findElement(By.id("kw")).sendKeys("123456");
Thread.sleep(3000);
chromeDriver.findElement(By.id("kw")).clear();*/
WebElement webElement1 = chromeDriver.findElement(By.id("kw"));
System.out.println("得到元素的标签名:"+webElement1.getTagName());
System.out.println("得到元素的maxlength属性:"+webElement1.getAttribute("maxlength"));
WebElement webElement2 = chromeDriver.findElement(By.xpath("//a[text()='hao123']"));
System.out.println("得到元素的文本值"+webElement2.getText());
System.out.println("元素是否显示"+webElement2.isDisplayed());
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.2 WebDriver相关API
package cn.com.ge.apm.test;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
public class WebDriverOperate {
private static ChromeDriver chromeDriver;
public static void openChrome(){
System.setProperty("webdriver.chrome.driver","C:/zk/hj/chromedirver/chromedriver.exe");
chromeDriver = new ChromeDriver();
chromeDriver.get("https://www.baidu.com");
}
public static void main(String[] args) {
try {
openChrome();
// 1
/*System.out.println("当前的URL:"+chromeDriver.getCurrentUrl());
System.out.println("当前的标题:"+chromeDriver.getTitle());
System.out.println("当前的源代码:"+chromeDriver.getPageSource());
//关闭所有页面
chromeDriver.quit();*/
// 2关闭当前窗口
chromeDriver.findElement(By.id("kw")).sendKeys("腾讯课堂");
chromeDriver.findElement(By.id("su")).click();
Thread.sleep(10000);
chromeDriver.findElement(By.xpath("//span[@class='c-img-border c-img-radius-large']")).click();
Thread.sleep(2000);
//默认关掉的是第一个 需要关闭其他窗口需要窗口切换
chromeDriver.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package cn.com.ge.apm.test;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class WebDriverOperate {
private static ChromeDriver chromeDriver;
public static void openChrome(){
System.setProperty("webdriver.chrome.driver","C:/zk/hj/chromedirver/chromedriver.exe");
chromeDriver = new ChromeDriver();
chromeDriver.get("https://www.baidu.com");
}
public static void main(String[] args) {
try {
openChrome();
// 1
/*System.out.println("当前的URL:"+chromeDriver.getCurrentUrl());
System.out.println("当前的标题:"+chromeDriver.getTitle());
System.out.println("当前的源代码:"+chromeDriver.getPageSource());
//关闭所有页面
chromeDriver.quit();*/
// 2关闭当前窗口
/*chromeDriver.findElement(By.id("kw")).sendKeys("腾讯课堂");
chromeDriver.findElement(By.id("su")).click();
System.out.println("打开新窗口前句柄:"+chromeDriver.getWindowHandle());
System.out.println("新窗口打开前所有句柄:"+chromeDriver.getWindowHandles());
Thread.sleep(10000);
chromeDriver.findElement(By.xpath("//span[@class='c-img-border c-img-radius-large']")).click();
Thread.sleep(2000);
System.out.println("打开后的句柄:"+chromeDriver.getWindowHandle());
System.out.println("新窗口打开后所有句柄:"+chromeDriver.getWindowHandles());
//默认关掉的是第一个 需要关闭其他窗口需要窗口切换
chromeDriver.close();*/
WebDriver.Options options = chromeDriver.manage();
//管理当前窗口的接口->当前窗口全屏
options.window().fullscreen();
//获取当前窗口宽和高
// Dimension dimension = manage.window().getSize();
// System.out.println("height={}"+dimension.getHeight()+" width="+"dimension.getWidth()");
//获取当前窗口的x轴和y轴
System.out.println(options.window().getPosition().x);
System.out.println(options.window().getPosition().y);
} catch (Exception e) {
e.printStackTrace();
}
}
}
navigate对象
//navigate对象
WebDriver.Navigation navigation = chromeDriver.navigate();
Thread.sleep(2000);
//访问京东
navigation.to("https://www.jd.com");
Thread.sleep(2000);
//刷新网页
navigation.refresh();
Thread.sleep(2000);
//回退
navigation.back();
Thread.sleep(2000);
//前进
navigation.forward();
4.3 隐式等待
4.4 显示等待
4.5 特殊元素定位于操作-模态框
4.6 特殊元素定位于操作 iframe
4.7 特殊元素定位于操作 window
4.8 特殊元素定位于操作 select 下拉框
chromeDriver.get("http://www.baidu.com");
chromeDriver.findElement(By.id("s-usersetting-top")).click();
//and: a[@name='tj_settingicon' and @class='pf']
//先找父元素再找子元素://div[@id='u1']/a[text()='设置']
chromeDriver.findElement(By.xpath("//span[text()='高级搜索']")).click();
Thread.sleep(2000);
chromeDriver.findElement(By.xpath("//span[text()='时间不限']")).click();
Thread.sleep(2000);
chromeDriver.findElement(By.xpath("//p[text()='一年内']")).click();
//定位时间下拉框
WebElement webElement = chromeDriver.findElement(By.name("gpc"));
//把webElement封装成Select对象
Select select = new Select(webElement);
select.selectByIndex(1);
Thread.sleep(2000);
select.selectByVisibleText("一月内");
4.9 特殊元素定位于操作-时间日期空间
4.9.1 可以输入数据的类型
4.9.2 日期控件去除redorly的限制
4.9.3 先在控制台实现
4.9.4 特殊日期控件通过执行javascript实现
4.10 特殊元素定位于操作-鼠标操作
目标2拖拽至目标3
4.11 特殊元素定位于操作-文件上传
4.11.1 写入路径实现
4.11.2 第三方控件实现
第三方工具autoit