自动化测试selenium篇(三)

1. 键盘事件

1.1 键盘按键用法

        要使用键盘按键,必须引入keys 包: from selenium.webdriver.common.keys import Keys 通过send_keys()调用按键:

        send_keys(Keys.TAB) # TAB

        send_keys(Keys.ENTER) # 回车

        send_keys(Keys.SPACE) #空格键

        send_keys(Keys.ESCAPE) #回退键(Esc)

        1、回车

        // 回车
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);
   private static void Test14() throws InterruptedException {
        // 创建一个浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开百度首页
        webDriver.get("https://www.baidu.com/");
        // 输入“蛋糕”
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("沈梦瑶");
        sleep(3000);
        // 回车
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);
        sleep(3000);
        // 校验
        List<WebElement> webElements = webDriver.findElements(By.xpath("//font[text()=\"沈梦瑶\"]"));
        sleep(3000);
        int flag = 0;
        // 找到搜索结果,如果有蛋糕这个关键词对应的元素,测试通过
        // 否则测试不通过
        for(int i = 0; i < webElements.size(); i++) {
            if(webElements.get(i).getText().equals("蛋糕")) {
                flag = 1;
                break;
            }
        }
        if(flag == 1) {
            System.out.println("测试通过");
        } else {
            System.out.println("测试不通过");
        }
    }

1.2 键盘组合键用法

        send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)

        send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)

        send_keys(Keys.CONTROL,'x') #剪贴(Ctrl+X)

        send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)

代码如下:

  private static void Test15() throws InterruptedException {
        // 创建一个浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开百度首页
        webDriver.get("https://www.baidu.com");
        // 输入“蛋糕”
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("沈梦瑶");
        sleep(3000);
        // Ctrol + A
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");
        sleep(4000);
        // Ctrol + X
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");
        sleep(4000);
        // Ctrol + V
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");
        sleep(4000);
        // 点击百度一下按钮
        webDriver.findElement(By.cssSelector("#su")).click();
        // 校验
        String no_expected_url = "https://www.baidu.com/";
        String cur_url = webDriver.getCurrentUrl();
        if(cur_url.equals(no_expected_url)) {
            System.out.println("测试不通过");
        } else {
            System.out.println("测试通过");
        }
    }

2. 鼠标事件

        ActionChains(driver) 生成用户的行为。所有的行动都存储在actionchains 对象。通过perform()存储的行为。

        move_to_element(element) 移动鼠标到一个元素中,menu 上面已经定义了他所指向的哪一个元素

        perform() 执行所有存储的行为

        ActionChains 类

         context_click() 右击

        double_click() 双击

        drag_and_drop() 拖动

        move_to_element() 移动

2.1 右键鼠标         

代码如下:

    private static void Test16() 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(3000);
        // 鼠标操作
        // 先要创建一个Actions
        Actions actions = new Actions(webDriver);
        sleep(3000);
        // 找到目标元素(图片这个按钮)
        WebElement target = webDriver.findElement(By.cssSelector("#searchTag > div > div > a:nth-child(2) > span"));
        sleep(3000);
        // 鼠标挪动到这个按钮上
        actions.moveToElement(target).contextClick().perform();
    }

        想要右键鼠标且能看到效果,就要在后面的操作中加oerform语句;

2.2 切换窗口

代码如下:

        本本分代码设计到从百度首页到新闻页面之后,我们的鼠标能够顺利的在新闻页面找到输入框,这里就涉及到页面资源,我们要使用getWindowHandle()来得到当前浏览器中所有的页面资源;

 private static void Test17_v2() throws InterruptedException {
        // 创建一个驱动
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        // 点击新闻按钮
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        sleep(5000);
        // 获取到当前的窗口句柄
        String cur_handle = webDriver.getWindowHandle();
        System.out.println("当前窗口句柄等于:" + cur_handle);
        // 获取到浏览器当前所有的窗口句柄
        Set<String> all_handles = webDriver.getWindowHandles();
        String target = "";
        // 遍历当前浏览器所有的窗口句柄
        for (String temp : all_handles) {
            if(!temp.equals(cur_handle)) {
                webDriver.switchTo().window(temp);
            }
        }
        // 将窗口句柄切换到最后一个窗口句柄
        sleep(3000);
        // 找到新闻搜索框
        // 输入“经济新闻头条”
        webDriver.findElement(By.cssSelector("#ww")).sendKeys("经济头条");
        // 点击百度一下按钮
        webDriver.findElement(By.cssSelector("#s_btn_wr")).click();
        // 找到搜索结果
        // 如果搜索结果中包含经济或者头条,此时测试通过
        sleep(3000);
        List<WebElement> webElements = webDriver.findElements(By.xpath("//em[text()=\"经济\"]"));
        sleep(3000);
        int flag = 0;
        for(int i = 0; i < webElements.size(); i++) {
            if(webElements.get(i).getText().equals("经济") || webElements.get(i).getText().equals("头条")) {
                flag = 1;
                break;
            }
        }
        if(flag == 1) {
            System.out.println("测试通过");
        } else {
            System.out.println("测试不通过");
        }
    }

结果如下所示:

 2.3 截图

        通过selenium来进行截图操作:

步骤一:首先进入到中央仓库;

步骤二:搜索输入:common-io,选择下图所示:

步骤三:选择2.15.1的内容

 

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.15.1</version>
</dependency>

将该段代码放入到pom文件;

        所以关于截图操作的代码如下所示:

         File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);

        我们将我们的驱动器进行类型强制转化,在进行截图之后将该数据使用文件的形式存放起来;

  private static void Test18() throws InterruptedException, IOException {
        // 创建驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开百度首页
        webDriver.get("https://www.baidu.com");
        // 输入“刘力菲”
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("刘力菲");
        // 搜索
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        // 截图,把截得图放到了file临时变量
        //此处也是进行了强制类型转换
        //通过文件的形式将我们的额数据进行保存
        File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        // 把file保存到磁盘中
        FileUtils.copyFile(file, new File("D://截图2024_01_24.png"));
        webDriver.quit();
    }

        故此代码运行成功‘;

3.定位一组元素

3.1 框的点击

        选择所有的方选框;

代码如下所示:

 private static void Page01() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/Selenium2024_01_20/Page/test01.html?_ijt=crt4qqbabj9uugecnbv5fr0djh&_ij_reload=RELOAD_ON_SAVE");
        List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));
        for(int i = 0; i < webElements.size(); i++) {
            if(webElements.get(i).getAttribute("type").equals("checkbox")) {
                webElements.get(i).click();
            }
        }
    }

结果如下所示:

3.2 多框架页面

 private static void Page02() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/Selenium2024_01_20/Page/test02.html?_ijt=aumg7c4b16s14h3vt2atkcl1f4&_ij_reload=RELOAD_ON_SAVE");
        webDriver.switchTo().frame("f1");
        sleep(3000);
        webDriver.findElement(By.cssSelector("body > div > div > a")).click();
    }

        我们在面对多框架页面的时候,要在选择定位元素之前要知道该元素在那一个页面框架上,所以我们要使用switchTo.frame来进行框架的转换;

 

ps:本次的内容就到这里了,如果对你有所帮助的话就请一键三连哦!!!

封面截图来自刘姝贤的毕业公演的pv;

url:【流水线的流水账】江西几日游_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值