10. selenium API (二)

目录

1. 多层框架/窗口定位

2. 下拉框处理

2.1 前端界面

2.2 代码

 3. 针对 alert 弹窗进行操作

3.1 前端界面

3.2 代码

4. 文件提交

4.1 前端界面

4.2 代码 

5. 显示等待

6. 操作浏览器滚动条

7. 截图

8. 浏览器关闭

9. 窗口切换


在上篇文章中,我们学习了 selenium 的一部分 API ,接下来我们将继续学习 selenium 的其他 API。

1. 多层框架/窗口定位

运行以下代码:



    
    frame
    
    


frame

click

在展示的界面中,点击“click”,弹出如下图所示的对话框: 

10. selenium API (二)_第1张图片

那么,对于以上的多层框架,我们如何进行操作呢?

private static void page02() {
        // 创建浏览器驱动
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        // 打开网页
        webDriver.get("http://localhost:63342/TestCode/src/main/Page/test02.html?_ijt=bl946c4l1esjbgi09kpv3kfull");
        // 找到 click 元素点击
        webDriver.switchTo().frame("f1");
        webDriver.findElement(By.cssSelector("body > div > div > a")).click(); // click 元素属于 f1
    }

运行以上代码后,可以看到自动选择了 f1 点击了 click 按钮,并弹出了对话框。

10. selenium API (二)_第2张图片

2. 下拉框处理

2.1 前端界面





如下图所示:

10. selenium API (二)_第3张图片

2.2 代码

我们根据 Value 来进行选择:

10. selenium API (二)_第4张图片

代码如下: 

private static void page03() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开网页
        webDriver.get("http://localhost:63342/TestCode/src/main/Page/test03.html?_ijt=446o7rpogvt1o4i9oujv9j6tcg&_ij_reload=RELOAD_ON_SAVE");
        // 操作下拉框
        Select select = new Select(webDriver.findElement(By.cssSelector("#ShippingMethod")));
        // 通过 Value 进行修改
//        select.selectByValue("12.51");
        // 通过 Index 进行修改
        select.selectByIndex(2);
    }

 3. 针对 alert 弹窗进行操作

针对一个普通的 alert 的弹窗的操作有:确定、取消、输入。

3.1 前端界面




    
    Title





10. selenium API (二)_第5张图片

3.2 代码

private static void page04() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/TestCode/src/main/Page/test04.html?_ijt=qndlcui1g1leqr5le5ehehn2hm&_ij_reload=RELOAD_ON_SAVE");
        webDriver.findElement(By.cssSelector("button")).click();
        sleep(3000);
//        // alert 弹窗确定
//        webDriver.switchTo().alert().accept();
//        // alert 弹窗取消
//        webDriver.switchTo().alert().dismiss();
        // alert 弹窗输入
        webDriver.switchTo().alert().sendKeys("你好");
        webDriver.switchTo().alert().accept();
    }

4. 文件提交

4.1 前端界面




    
    Title




10. selenium API (二)_第6张图片

4.2 代码 

 private static void page05() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/TestCode/src/main/Page/test05.html?_ijt=jm7pqiancl1i3ktkuciodrk1dl&_ij_reload=RELOAD_ON_SAVE");
        // 找到按钮(上传文件的按钮),输入一个字符串
        webDriver.findElement(By.cssSelector("input")).sendKeys("D:\\CSDN\\cat.jpg");
    }

以下内容为补充内容!!! 

5. 显示等待

显示等待和隐式等待,表示最多等待输入的时间,如果找到了对应元素则直接执行后续代码,不再强制等待,即显示等待和隐式等待都是智能等待;不同点:隐式等待等待的是页面上的所有元素,显示等待等待条件满足即可

    private static void test13() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
//        webDriver.get("http://www.baidu.com/");
        webDriver.get("http://localhost:63342/TestCode/src/main/Page/test02.html?_ijt=7f6liucvphpe698jjd88202qv0&_ij_reload=RELOAD_ON_SAVE");
        sleep(3000);
        WebDriverWait webDriverWait = new WebDriverWait(webDriver,50);
//        webDriverWait.until(ExpectedConditions.titleIs("百度一下,你就知道"));
        webDriverWait.until(ExpectedConditions.textToBe(By.cssSelector("hs"),"frame"));
    }

6. 操作浏览器滚动条

private static void test14() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://www.baidu.com/");
        // 在搜索框输入”软件“
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件");
        // 点解”百度一下"按钮
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        // 滚动条滚动到最下端
        ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000;");
    }

7. 截图

添加依赖:https://mvnrepository.com/artifact/commons-io/commons-io/2.4

10. selenium API (二)_第7张图片

将以上依赖添加到 pom.xml 中: 

10. selenium API (二)_第8张图片

private static void test15() throws IOException, InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/TestCode/src/main/Page/test02.html?_ijt=7f6liucvphpe698jjd88202qv0&_ij_reload=RELOAD_ON_SAVE");
        sleep(5000);
        // 强制类型转换
        File src_file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        // 将截图复制到指定的文件路径下,并命名为:jietu.png
        FileUtils.copyFile(src_file,new File("D:\\CSDN\\jietu.png"));
    }

8. 浏览器关闭

private static void test14() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://www.baidu.com/");
        // 在搜索框输入”软件“
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件");
        // 点解”百度一下"按钮
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        // 滚动条滚动到最下端
        ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000;");
        // 关闭浏览器
        webDriver.quit();
    }

quit 相当于直接点击了右上角进行关闭。

    private static void test16() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        // 关闭浏览器
        webDriver.close();
    }

close 关闭的是当前页面;quit 关闭的是浏览器,同时会删除网站的 cookie。

9. 窗口切换

private static void test17() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        // 获取到浏览器所有的窗口句柄
        Set handles = webDriver.getWindowHandles();
        String target_handle = "";
        for(String handle:handles){
            target_handle = handle;
        }
        // 窗口切换
        webDriver.switchTo().window(target_handle);
        webDriver.findElement(By.cssSelector("#header-link-wrapper > li:nth-child(5) > a")).click();
    }

你可能感兴趣的:(测试,selenium,测试工具)