目录
定位元素
xpath
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
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和css比较
上边的代码可以明显看出来,xpath的方式比较繁琐和复杂。
xpath的缺点
1. xpath的方式 效率 比较低,因为xpath会将页面先加载在内存中,然后驱动器(webDriver)扫描整个文件,在整个文件中进行查找。
2. xpath会随着页面布局的改变而改变,几乎不能维护。
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<WebElement>
List<WebElement> 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();
}
获取 url 和文本
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<String> 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"));
}