目录
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"));
- }