目录
定位元素
xpath
绝对路径
相对路径
css
xpath和css比较
xpath的缺点
xpath的优点
基本操作
点击 清空 退出操作
获取 url 和文本
获取属性值和文本
等待
鼠标事件
浏览器页面前进 后退 刷新操作
浏览器界面大小设置
键盘组合键操作
切换窗口
滚动条操作
截图操作
XPath 是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,所以selenium 可以使用这种强大语言在web 应用中定位元素。
xpath定位元素有两种方式:绝对路径 和 相对路径
//xpath定位元素
private static void test16() {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com/");
//相对路径
webDriver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("北京");
webDriver.findElement(By.xpath("//*[@id=\"su\"]")).click();
//绝对路径
webDriver.findElement(By.xpath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input")).sendKeys("北京");
webDriver.findElement(By.xpath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input")).click();
}
CSS(Cascading Style Sheets)是一种语言,它被用来描述HTML 和XML 文档的表现。 CSS 使用选择器来为页面元素绑定属性。
//css定位元素
private static void test17() {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com/");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("上海");
webDriver.findElement(By.cssSelector("#su")).click();
}
这里的标签式就是前端css的选择器,这里不细说,具体可以参考 CSS知识讲解-CSDN博客
可以明显看出来这两种方式css是相对简单的。
文章主要使用css定位元素的方式进行代码的书写
上边的代码可以明显看出来,xpath的方式比较繁琐和复杂。
1. xpath的方式 效率 比较低,因为xpath会将页面先加载在内存中,然后驱动器(webDriver)扫描整个文件,在整个文件中进行查找。
2. xpath会随着页面布局的改变而改变,几乎不能维护。
1. xpath可以做布尔逻辑判断
//*[@id="kw" and @name = "wd"]
2. 可以模糊定位
starts-with(属性,值):以什么开头
ends-with(属性,值):以什么结尾
contains(属性,值):包含什么
//*[starts-with(@value,'百度-')]
public static void test3() throws InterruptedException {
//创建一个对象设置参数
ChromeOptions options=new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
//创建一个驱动
WebDriver webDriver=new ChromeDriver(options);
webDriver.get("https://www.baidu.com");
//选中搜索框,输入要搜索的内容
webDriver.findElement(By.cssSelector("#kw")).sendKeys("你好");
//点击搜索按钮
webDriver.findElement(By.cssSelector("#su")).click();
//等待渲染
sleep(3000);
//查看返回的结果的条数,返回的是List
List webElements=webDriver.findElements(By.cssSelector("em"));
System.out.println(webElements.size());
if(webElements.size()==0){
System.out.println("搜索失败");
}else{
System.out.println("搜索成功");
}
}
get("url") //进入页面
click() //点击
clear() //清空
quit() //退出,关闭浏览器
close() //退出,关闭当前界面
public static void test5(){
ChromeOptions options=new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver=new ChromeDriver(options);
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("你好");
webDriver.findElement(By.cssSelector("#su")).click();
webDriver.findElement(By.cssSelector("#kw")).clear();
}
getTitle() //获取标题
getCurrentUrl() //获取当前url
//获取页面title url
private static void test10() {
ChromeOptions options=new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver=new ChromeDriver(options);
webDriver.get("https://www.baidu.com/");
String url=webDriver.getCurrentUrl();
if(url.equals("https://www.baidu.com/")){
System.out.println(url+"测试通过");
}else{
System.out.println(url+"测试不通过");
}
//标题
String title = webDriver.getTitle();
if(title.equals("百度一下,你就知道")){
System.out.println(title+"测试通过");
}else{
System.out.println(title);
}
//webDriver.quit();
}
getText() //只能获取div标签中的标题
getAttrubute(" ") //获取任意标签中的属性
private static void test15() {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com/");
//任意标签中的文本属性都可以获取到
System.out.println(webDriver.findElement(By.cssSelector("#su")).getAttribute("value"));
System.out.println(webDriver.findElement(By.cssSelector("#su")).getAttribute("type"));
//只能获取到div标签中的文本
System.out.println(webDriver.findElement(By.cssSelector("#s-hotsearch-wrapper")).getText());
}
主要有三种等待: 强制等待 显示等待 隐式等待
private static void test14() {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com/");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("上海");
webDriver.findElement(By.cssSelector("#su")).click();
//强制等待, 这里等待5秒
sleep(5000);
//隐式等待
webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
//显示等待
WebDriverWait wait=new WebDriverWait(webDriver,11);
wait.until(ExpectedConditions.titleIs("百度一下,你就知道"));
}
方法:
moveToElement() //移动到元素中心位置
click() //单机
doubleClick() //双击
contextClick() //右击
clickAndHold() //单机不松开
release() //释放当前按下的左键
//鼠标操作perform():执行操作
private static void test13() throws InterruptedException {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com/");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("上海");
webDriver.findElement(By.cssSelector("#su")).click();
//鼠标操作
Actions action=new Actions(webDriver);
WebElement element = webDriver.findElement(By.cssSelector("#searchTag > div > div > a:nth-child(5) > span"));
//移动到元素中心
action.moveToElement(element).perform();
//双击
action.doubleClick(element).perform();
//单击
action.click(element).perform();
//右击
action.contextClick(element).perform();
//单机不松开
action.clickAndHold(element).perform();
sleep(3000);
//释放按下的左键
action.release(element).perform();
}
webDriver.navigate().back() //后退
webDriver.navigate().forward() //前进
webDriver.navigate().refresh() //刷新
//浏览器前进后退操作
private static void test11() throws InterruptedException {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com/");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("北京");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3_000);
//后退
webDriver.navigate().back();
sleep(3000);
//前进
webDriver.navigate().forward();
sleep(3000);
//刷新
webDriver.navigate().refresh();
}
webDriver.manage().window().maximize(); //最大化
webDriver.manage().window().fullscreen(); //全屏
webDriver.manage().window().setSize(new Dimension(500,500)); //自定义设置
//浏览器屏幕大小设置
private static void test9() throws InterruptedException {
ChromeOptions options=new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver=new ChromeDriver(options);
webDriver.get("https://www.baidu.com/");
webDriver.manage().window().maximize();
sleep(5000);
webDriver.manage().window().fullscreen();
sleep(5000);
webDriver.manage().window().setSize(new Dimension(500,500));
sleep(5000);
webDriver.quit();
}
通过send_keys()调用按键:
send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车
send_keys(Keys.SPACE) #空格键
send_keys(Keys.ESCAPE) #回退键(Esc)
send_keys(Keys.CONTROL+"A") #全选,其余的几个操作格式一样
//快捷键的操作
private static void test12() throws InterruptedException {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com/");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("北京");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(5000);
//全选
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL+"A");
sleep(2000);
//剪贴
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL+"X");
//刷新页面
webDriver.navigate().refresh();
sleep(2000);
//粘贴
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL+"V"+"歌曲");
sleep(2000);
webDriver.findElement(By.cssSelector("#su")).click();
}
//切换窗口到最新的一个
private static void test8() {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com/");
webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(4)")).click();
Set windowHandles = webDriver.getWindowHandles();
String window="";
for(String handle:windowHandles){
window=handle;
}
System.out.println(window);
webDriver.switchTo().window(window);
webDriver.findElement(By.cssSelector("#forumList > li:nth-child(3) > a")).click();
webDriver.close();
}
//滚动条操作
private static void test7() throws InterruptedException {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com/");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("北京");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(5000);
((JavascriptExecutor)webDriver).executeScript("Document.documentElement.scrollTop=10000;");
webDriver.quit();
}
//截图
private static void test6() throws IOException {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com");
File src = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("D:/桌面/jietu.png"));
}