selenium流程控制

1、隐式等待

@Test
    public void testImplictWait(){
        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.baidu.com/");
        driver.manage().timeouts().implicitlyWait(1000, TimeUnit.MILLISECONDS);
        driver.findElement(By.id("dologin")).click();
        driver.findElement(By.id("register"));
    }

隐式等待不推荐使用,它的缺点在于如果设定了等待时长,则在页面元素没有被立刻找到的情况下,测试程序也必须等待设定的时长。例如,设定了隐式等待时间为10秒,即使页面元素过了5秒后显示了,测试程序也会等待10秒后再进行后续页面元素的查找工作。
推荐使用显示等待,如果过了5秒返回了,则测试程序会立即执行测试程序后续逻辑,节约测试程序的运行时间。

2、显示等待

@Test
    public void testExplicitWait(){
        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.baidu.com/");
        WebDriverWait wait = new WebDriverWait(driver,10);//设定等待时间为10秒
        wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//p")));//判断p标签对象是否在页面中    
    }

使用ExpectedConditions类中自带的方法,可以进行显式等待的判断。只有满足显式等待的条件要求,测试代码才会继续向后执行后续的测试逻辑。当显式等待条件未被满足,在设定的最大显式等待时间阈值内,会停在当前代码位置进行等待,直到设定的等待条件被满足。

3、自定义显式等待

@Test
    public void testExplicitWait(){
        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.baidu.com/");
        WebDriverWait wait = new WebDriverWait(driver,10);
        WebElement el = wait.until(new ExpectedCondition(){

            @Override
            public WebElement apply(WebDriver driver) {
                return driver.findElement(By.id("dologin"));
            }

        });//自定义ExpectedCondition类的方法,其中new ExpectedCondition生成了一个此接口的匿名对象
        System.out.println(el);
    }

4、处理JS弹出窗口
使用Alert类操作弹出窗口。

(1)操作Alert弹窗(弹窗中只有一个确定按钮)

@Test
    public void testHandleAlert(){
        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.baidu.com/");
        WebDriverWait wait = new WebDriverWait(driver,10);
        WebElement el = wait.until(new ExpectedCondition(){

            @Override
            public WebElement apply(WebDriver driver) {
                return driver.findElement(By.id("alert"));
            }

        });//找到一个触发弹窗的元素
        el.click();//点击弹出窗口
        Alert temp = driver.switchTo().alert();//创建一个Alert的弹窗对象
        temp.accept();//选中确定按钮
    }

(2)操作confirm弹窗(弹窗中只有一个确定按钮和一个取消按钮)

@Test
    public void tesHandleconfirm(){
        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.baidu.com/");
        WebDriverWait wait = new WebDriverWait(driver,10);
        WebElement el = wait.until(new ExpectedCondition(){

            @Override
            public WebElement apply(WebDriver driver) {
                return driver.findElement(By.id("confirm"));
            }

        });//找到一个触发弹窗的元素
        el.click();//点击弹出窗口
        Alert temp = driver.switchTo().alert();//创建一个confirm的弹窗对象
        String content = temp.getText();//获取弹窗中的提示文本
        temp.dismiss();//选中取消按钮
        assertTrue(content.equals("我是确认提示框!"));//断言提示文本是否正确
    }

(3)操作confirm弹窗(弹窗中只有一个确定按钮和一个取消按钮,并且可以输入文本)

@Test
    public void tesHandlePrompt(){
        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.baidu.com/");
        WebDriverWait wait = new WebDriverWait(driver,10);
        WebElement el = wait.until(new ExpectedCondition(){

            @Override
            public WebElement apply(WebDriver driver) {
                return driver.findElement(By.id("prompt"));
            }

        });//找到一个触发弹窗的元素
        el.click();//点击弹出窗口
        Alert temp = driver.switchTo().alert();//创建一个confirm的弹窗对象
        temp.sendKeys("hello world");
        String content = temp.getText();//获取弹窗中的文本
        temp.dismiss();//选中取消按钮
        assertTrue(content.equals("我是确认提示框!"));
    }

5、识别处理Frame框架
selenium流程控制_第1张图片

@Test
    public void testHandleFrame(){
        WebDriver driver = new FirefoxDriver();
        driver.get("http://localhost:8080/demo/frame.html");
        WebElement left = driver.findElement(By.id("leftframe"));//找到左边frame元素
        driver.switchTo().frame(left);//进入左侧frame页面
        driver.findElement(By.cssSelector("input[name='left']")).sendKeys("hello");//对左侧frame页面的元素进行操作
        driver.switchTo().defaultContent();//返回到最初默认页面
    }

6、处理弹出的新窗口
selenium流程控制_第2张图片

@Test
    public void testWindow(){
        WebDriver driver = new FirefoxDriver();
        driver.get("http://localhost:8080/demo/window.html");
        String parent = driver.getWindowHandle();//进入当前窗口
        driver.findElement(By.id("helpbutton1")).click();//点击触发按钮

        Set<String> all = driver.getWindowHandles();//获取当前所有窗口
        Iterator<String> iter= all.iterator();//将当前所有窗口存入集合进行遍历
        String temp;
        while(iter.hasNext()){
            temp = iter.next();
            if (!temp.equals(parent)){
                driver.switchTo().window(temp);//判断是否为新弹出的窗口并进入
            }
        }

    }

7、操作浏览器中的cookie

@Test
    public void testCookie(){
        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.sougou.com");
        //得到当前页面下所有的cookie,并且输出它们的所在域、name、value、有效日期和路径。
        Set cookies = driver.manage().getCookies();
        System.out.println(String.format("domain->name->value->expiry->path"));
        for(Cookie cookie:cookies){
            System.out.println(String.format("%s->%s->%s->%s->%s", 
                    cookie.getDomain(),cookie.getName(),cookie.getValue(),
                    cookie.getExpiry(),cookie.getPath()));
        }
        //删除cookie的3种方法
        //第一种:通过cookie的name属性
        driver.manage().deleteCookieNamed("cookiename");

        //第二种:通过cookie对象
        driver.manage().addCookie(newcookie);

        //第三种:全部删除
        driver.manage().deleteAllCookies();

    }

你可能感兴趣的:(selenium流程控制)