• selenium的基本操作


    目录

    定位元素

    xpath

    绝对路径

    相对路径

    css

    xpath和css比较

    xpath的缺点

    xpath的优点

    基本操作

    点击 清空 退出操作

    获取 url 和文本

    获取属性值和文本

    等待

    鼠标事件

    浏览器页面前进 后退 刷新操作

    浏览器界面大小设置

    键盘组合键操作

    切换窗口

    滚动条操作

    截图操作


    定位元素

    xpath

    XPath 是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,所以selenium 可以使用这种强大语言在web 应用中定位元素。

    xpath定位元素有两种方式:绝对路径 和 相对路径

    绝对路径

    相对路径

    1. //xpath定位元素
    2. private static void test16() {
    3. WebDriver webDriver=new ChromeDriver();
    4. webDriver.get("https://www.baidu.com/");
    5. //相对路径
    6. webDriver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("北京");
    7. webDriver.findElement(By.xpath("//*[@id=\"su\"]")).click();
    8. //绝对路径
    9. webDriver.findElement(By.xpath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input")).sendKeys("北京");
    10. webDriver.findElement(By.xpath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input")).click();
    11. }

    css

    CSS(Cascading Style Sheets)是一种语言,它被用来描述HTML 和XML 文档的表现。 CSS 使用选择器来为页面元素绑定属性。

    1. //css定位元素
    2. private static void test17() {
    3. WebDriver webDriver=new ChromeDriver();
    4. webDriver.get("https://www.baidu.com/");
    5. webDriver.findElement(By.cssSelector("#kw")).sendKeys("上海");
    6. webDriver.findElement(By.cssSelector("#su")).click();
    7. }

    这里的标签式就是前端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,'百度-')]

    基本操作

    1. public static void test3() throws InterruptedException {
    2. //创建一个对象设置参数
    3. ChromeOptions options=new ChromeOptions();
    4. options.addArguments("--remote-allow-origins=*");
    5. //创建一个驱动
    6. WebDriver webDriver=new ChromeDriver(options);
    7. webDriver.get("https://www.baidu.com");
    8. //选中搜索框,输入要搜索的内容
    9. webDriver.findElement(By.cssSelector("#kw")).sendKeys("你好");
    10. //点击搜索按钮
    11. webDriver.findElement(By.cssSelector("#su")).click();
    12. //等待渲染
    13. sleep(3000);
    14. //查看返回的结果的条数,返回的是List
    15. List webElements=webDriver.findElements(By.cssSelector("em"));
    16. System.out.println(webElements.size());
    17. if(webElements.size()==0){
    18. System.out.println("搜索失败");
    19. }else{
    20. System.out.println("搜索成功");
    21. }
    22. }

    点击 清空 退出操作

    get("url") //进入页面

    click() //点击

    clear() //清空

    quit() //退出,关闭浏览器

    close() //退出,关闭当前界面

    1. public static void test5(){
    2. ChromeOptions options=new ChromeOptions();
    3. options.addArguments("--remote-allow-origins=*");
    4. WebDriver webDriver=new ChromeDriver(options);
    5. webDriver.get("https://www.baidu.com");
    6. webDriver.findElement(By.cssSelector("#kw")).sendKeys("你好");
    7. webDriver.findElement(By.cssSelector("#su")).click();
    8. webDriver.findElement(By.cssSelector("#kw")).clear();
    9. }

    获取 url 和文本

    getTitle() //获取标题

    getCurrentUrl() //获取当前url

    1. //获取页面title url
    2. private static void test10() {
    3. ChromeOptions options=new ChromeOptions();
    4. options.addArguments("--remote-allow-origins=*");
    5. WebDriver webDriver=new ChromeDriver(options);
    6. webDriver.get("https://www.baidu.com/");
    7. String url=webDriver.getCurrentUrl();
    8. if(url.equals("https://www.baidu.com/")){
    9. System.out.println(url+"测试通过");
    10. }else{
    11. System.out.println(url+"测试不通过");
    12. }
    13. //标题
    14. String title = webDriver.getTitle();
    15. if(title.equals("百度一下,你就知道")){
    16. System.out.println(title+"测试通过");
    17. }else{
    18. System.out.println(title);
    19. }
    20. //webDriver.quit();
    21. }

    获取属性值和文本

    getText() //只能获取div标签中的标题

    getAttrubute(" ") //获取任意标签中的属性

    1. private static void test15() {
    2. WebDriver webDriver=new ChromeDriver();
    3. webDriver.get("https://www.baidu.com/");
    4. //任意标签中的文本属性都可以获取到
    5. System.out.println(webDriver.findElement(By.cssSelector("#su")).getAttribute("value"));
    6. System.out.println(webDriver.findElement(By.cssSelector("#su")).getAttribute("type"));
    7. //只能获取到div标签中的文本
    8. System.out.println(webDriver.findElement(By.cssSelector("#s-hotsearch-wrapper")).getText());
    9. }

    等待

    主要有三种等待: 强制等待 显示等待 隐式等待

    1. private static void test14() {
    2. WebDriver webDriver=new ChromeDriver();
    3. webDriver.get("https://www.baidu.com/");
    4. webDriver.findElement(By.cssSelector("#kw")).sendKeys("上海");
    5. webDriver.findElement(By.cssSelector("#su")).click();
    6. //强制等待, 这里等待5秒
    7. sleep(5000);
    8. //隐式等待
    9. webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
    10. //显示等待
    11. WebDriverWait wait=new WebDriverWait(webDriver,11);
    12. wait.until(ExpectedConditions.titleIs("百度一下,你就知道"));
    13. }

    鼠标事件

    方法:

    moveToElement() //移动到元素中心位置

    click() //单机

    doubleClick() //双击

    contextClick() //右击

    clickAndHold() //单机不松开

    release() //释放当前按下的左键

    1. //鼠标操作perform():执行操作
    2. private static void test13() throws InterruptedException {
    3. WebDriver webDriver=new ChromeDriver();
    4. webDriver.get("https://www.baidu.com/");
    5. webDriver.findElement(By.cssSelector("#kw")).sendKeys("上海");
    6. webDriver.findElement(By.cssSelector("#su")).click();
    7. //鼠标操作
    8. Actions action=new Actions(webDriver);
    9. WebElement element = webDriver.findElement(By.cssSelector("#searchTag > div > div > a:nth-child(5) > span"));
    10. //移动到元素中心
    11. action.moveToElement(element).perform();
    12. //双击
    13. action.doubleClick(element).perform();
    14. //单击
    15. action.click(element).perform();
    16. //右击
    17. action.contextClick(element).perform();
    18. //单机不松开
    19. action.clickAndHold(element).perform();
    20. sleep(3000);
    21. //释放按下的左键
    22. action.release(element).perform();
    23. }

    浏览器页面前进 后退 刷新操作

    webDriver.navigate().back() //后退

    webDriver.navigate().forward() //前进

    webDriver.navigate().refresh() //刷新

    1. //浏览器前进后退操作
    2. private static void test11() throws InterruptedException {
    3. WebDriver webDriver=new ChromeDriver();
    4. webDriver.get("https://www.baidu.com/");
    5. webDriver.findElement(By.cssSelector("#kw")).sendKeys("北京");
    6. webDriver.findElement(By.cssSelector("#su")).click();
    7. sleep(3_000);
    8. //后退
    9. webDriver.navigate().back();
    10. sleep(3000);
    11. //前进
    12. webDriver.navigate().forward();
    13. sleep(3000);
    14. //刷新
    15. webDriver.navigate().refresh();
    16. }

    浏览器界面大小设置

    webDriver.manage().window().maximize(); //最大化

    webDriver.manage().window().fullscreen(); //全屏

    webDriver.manage().window().setSize(new Dimension(500,500)); //自定义设置

    1. //浏览器屏幕大小设置
    2. private static void test9() throws InterruptedException {
    3. ChromeOptions options=new ChromeOptions();
    4. options.addArguments("--remote-allow-origins=*");
    5. WebDriver webDriver=new ChromeDriver(options);
    6. webDriver.get("https://www.baidu.com/");
    7. webDriver.manage().window().maximize();
    8. sleep(5000);
    9. webDriver.manage().window().fullscreen();
    10. sleep(5000);
    11. webDriver.manage().window().setSize(new Dimension(500,500));
    12. sleep(5000);
    13. webDriver.quit();
    14. }

    键盘组合键操作

    通过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")  #全选,其余的几个操作格式一样

    1. //快捷键的操作
    2. private static void test12() throws InterruptedException {
    3. WebDriver webDriver=new ChromeDriver();
    4. webDriver.get("https://www.baidu.com/");
    5. webDriver.findElement(By.cssSelector("#kw")).sendKeys("北京");
    6. webDriver.findElement(By.cssSelector("#su")).click();
    7. sleep(5000);
    8. //全选
    9. webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL+"A");
    10. sleep(2000);
    11. //剪贴
    12. webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL+"X");
    13. //刷新页面
    14. webDriver.navigate().refresh();
    15. sleep(2000);
    16. //粘贴
    17. webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL+"V"+"歌曲");
    18. sleep(2000);
    19. webDriver.findElement(By.cssSelector("#su")).click();
    20. }

    切换窗口

    1. //切换窗口到最新的一个
    2. private static void test8() {
    3. WebDriver webDriver=new ChromeDriver();
    4. webDriver.get("https://www.baidu.com/");
    5. webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(4)")).click();
    6. Set windowHandles = webDriver.getWindowHandles();
    7. String window="";
    8. for(String handle:windowHandles){
    9. window=handle;
    10. }
    11. System.out.println(window);
    12. webDriver.switchTo().window(window);
    13. webDriver.findElement(By.cssSelector("#forumList > li:nth-child(3) > a")).click();
    14. webDriver.close();
    15. }

    滚动条操作

    1. //滚动条操作
    2. private static void test7() throws InterruptedException {
    3. WebDriver webDriver=new ChromeDriver();
    4. webDriver.get("https://www.baidu.com/");
    5. webDriver.findElement(By.cssSelector("#kw")).sendKeys("北京");
    6. webDriver.findElement(By.cssSelector("#su")).click();
    7. sleep(5000);
    8. ((JavascriptExecutor)webDriver).executeScript("Document.documentElement.scrollTop=10000;");
    9. webDriver.quit();
    10. }

    截图操作

    1. //截图
    2. private static void test6() throws IOException {
    3. WebDriver webDriver=new ChromeDriver();
    4. webDriver.get("https://www.baidu.com");
    5. File src = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
    6. FileUtils.copyFile(src, new File("D:/桌面/jietu.png"));
    7. }

  • 相关阅读:
    MR混合现实模拟消防安全演练场景实训
    7分钟了解ChatGPT是如何运作的
    Android 多桌面图标启动, 爬坑点击打开不同页面
    数据库分区的通俗解释
    100天精通Python(爬虫篇)——第47天:selenium自动化操作浏览器
    mixup--学习笔记
    【C++学习(10)】将一个类作为另一个类的成员: 类对象和类指针; std::unique_ptr 智能管理类指针
    倍福TwinCAT3实现CSV、TXT文件读写操作
    论文阅读——SqueezeSAM
    UEC++ 接口
  • 原文地址:https://blog.csdn.net/m0_64188165/article/details/133465040