5.6 WebDriver API实例讲解(16-30)

16.操作单选框

      被测试的网页为Demo1。

      Java语言版本的API实例代码:

public static void operateRadio(){
        driver.get("file:///D:/%E6%95%99%E5%AD%A6/2015-2016-2/%E8%AF%BE%E4%BB%B6/w9/SeleniumDemo/files/Demo1/demo.html");
        driver.manage().window().maximize();
        
        WebElement radioOption=driver.findElement(By.xpath("//input[@value='Volvo']"));
        if(!radioOption.isSelected())
            radioOption.click();
        sleep(3000);
        
        List<WebElement> cars=driver.findElements(By.name("identity"));
        for(WebElement car:cars)
            if(car.getAttribute("value").equals("Audi")){
                if(!car.isSelected())
                    car.click();
                break;
            }
    }

17.操作复选框

      被测试的网页为Demo1。

      Java语言版本的API实例代码:

public static void operateCheckBox(){
        driver.get("file:///D:/%E6%95%99%E5%AD%A6/2015-2016-2/%E8%AF%BE%E4%BB%B6/w9/SeleniumDemo/files/Demo1/demo.html");
        driver.manage().window().maximize();
        sleep(2000);
        
        WebElement element=driver.findElement(By.xpath(".//*[@id='checkbox']/input[3]"));
        if(!element.isSelected())
            element.click();
        sleep(2000);
        if(element.isSelected())
            element.click();
        sleep(2000);
        System.out.println("end1");
        
        List<WebElement> checkboxs=driver.findElements(By.xpath(".//*[@id='checkbox']/input"));
        for(WebElement checkbox:checkboxs)
            checkbox.click();
        System.out.println("end2");
    }

18.杀掉Windows的浏览器进程

      测试前准备条件:

(1)打开一个Firefox浏览器

(2)打开一个IE浏览器

(3)打开一个Chrome浏览器

Java语言版本的API实例代码:

public static void operateWindowsProcess(){
        WindowsUtils.KillByName("firefox.exe");
        sleep(2000);
        WindowsUtils.KillByName("iexplore.exe");
        sleep(2000);
        WindowsUtils.KillByName("chrome.exe");
        sleep(2000);
    }

19.将当前浏览器的窗口截屏

public static void captureScreenInCurrentWindow(){
        driver.get("http://www.sogou.com");
        File scrFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        try{
            FileUtils.copyFile(scrFile, new File("d:\\test.png"));
        }catch(IOException e){
            e.printStackTrace();
        }
    }

20.执行JavaScript脚本

 被测试的网页为http://www.sogou.com。

      Java语言版本的API实例代码:

public static void executeJavaScript(){
        driver.get("http://www.sogou.com");
        //声明一个JavaScript执行器对象
        JavascriptExecutor js=(JavascriptExecutor)driver;
        //调用执行器对象的executeScript方法来执行JavaScript脚本返回当前浏览器窗口的 Title值
        String title=(String)js.executeScript("return document.title");
        System.out.println(title);
    }

21.拖拽页面元素

      被测试网页的网址:http://jqueryui.com/resources/demos/draggable/scroll.html

      此页面的3个方框元素可以被拖动。

      Java语言版本的API实例代码:

public static void dragPageElement(){
        driver.get("http://jqueryui.com/resources/demos/draggable/scroll.html");
        WebElement draggable=driver.findElement(By.id("draggable"));
        
        //向下拖动10个像素,共拖动5次
        for(int i=0;i<5;i++){
            //10表示元素的纵坐标向下移动10个像素,0表示元素的横坐标不变
            new Actions(driver).dragAndDropBy(draggable, 0, 10).build().perform();
        }
        sleep(2000);
        
        //向右拖动10个像素,共拖动5次
        for(int i=0;i<5;i++){
            new Actions(driver).dragAndDropBy(draggable, 10, 0).build().perform();
        }        
    }

22.模拟键盘的操作

      被测试网页的网址:http://www.sogou.com。

      Java语言版本的API实例代码:

public static void clickKeys(){
        driver.get("http://www.sogou.com/"); 
        WebElement element=driver.findElement(By.id("query"));
        element.click();
        Actions action=new Actions(driver);
        action.keyDown(Keys.CONTROL);  //按下Ctrl键
        action.keyDown(Keys.SHIFT);
        action.keyDown(Keys.ALT);
        action.keyDown(Keys.CONTROL);  //按下Ctrl键
        action.keyDown(Keys.SHIFT);
        action.keyDown(Keys.ALT);
        action.keyDown(Keys.SHIFT).sendKeys("abcdefg").perform();
    }

23.模拟鼠标右键事件

public static void rightClickMOuse(){
        driver.get("http://www.sogou.com/"); 
        Actions action=new Actions(driver);
        action.contextClick(driver.findElement(By.id("query"))).perform();
    }

24.在指定元素上方进行鼠标悬浮

public static void roverOnElement(){
        driver.get("file:///D:/%E6%95%99%E5%AD%A6/2015-2016-2/%E8%AF%BE%E4%BB%B6/w9/SeleniumDemo/files/Demo1/demo.html");
        driver.manage().window().maximize();
        sleep(2000);
        
        WebElement element=driver.findElement(By.xpath(".//*[@id='action']/input"));
        Actions action=new Actions(driver);
        action.moveToElement(element).perform();
    }

25.在指定元素上进行鼠标单击左键和释放的操作

   action.clickAndHold(element).perform();

   action.release(element).perform();

26.查看页面元素的属性

  element.getAttribute("value");

27.获取页面元素的CSS属性值

  element.getCssValue("width");

28.隐式等待

  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

       另外一种,笨方法等待,使当前线程进入等待,Thread.sleep();这种等待属于死等,很容易让线程挂掉,使程序抛异常,所以要慎用此方法。

29.常用的显式等待

  显式等待比隐式等待更节约测试脚本执行的时间,推荐尽量使用显式等待方式来判断页面元素是否存在。使用ExpectedConditions类中自带的方法,可以进行显式等待的判断。显式等待可以自定义等待的条件,用于更加复杂的页面元素状态判断。常用的显式等待条件如下表所示。

等待的条件 WebDriver方法
页面元素是否在页面上可用和可被单击 elementToBeClickable(By locator)
页面元素处于被选中状态 elementToBeSelected(WebElement element)
页面元素在页面中存在 presenceOfElementLocated(By locator)
在页面元素中是否包含特定的文本 textToBePresentInElement(By locator)
页面元素值 textToBePresentInElementValue(By locator, java.lang.String text)
标题 titleContains(java.lang.String title)

  只有满足显式等待的条件要求,测试代码才会继续向后执行后续的测试逻辑。如果超过设定的最大显式等待时间阈值,则测试程序会抛出异常,测试用例被认为执行失败。

public static void testExplictWait1(){
        driver.get("http://www.baidu.com");
        driver.manage().window().maximize();
        sleep(2000);
        
        WebElement element=driver.findElement(By.id("kw"));
        element.sendKeys("elon musk");
        element=driver.findElement(By.id("su"));
        element.click();
        
        //声明一个WebDriverWait对象,设定触发条件的最长等待时间为10秒
        WebDriverWait wait=new WebDriverWait(driver,10);
        wait.until(ExpectedConditions.titleContains("elon"));
        System.out.println("end");
    }

30.自定义的显式等待

public static void testExplictWait2()
    {
        driver.get("file:///D:/%E6%95%99%E5%AD%A6/2015-2016-2/%E8%AF%BE%E4%BB%B6/w9/SeleniumDemo/files/Demo1/demo.html");
        driver.manage().window().maximize();
        sleep(2000);
        
        WebElement element=driver.findElement(By.className("wait"));
        element.click();
        WebElement redDiv=(new WebDriverWait(driver,100))
                .until(new ExpectedCondition<WebElement>(){
            public WebElement apply(WebDriver d){
                return d.findElement(By.className("red"));
            }
        });
        System.out.println(redDiv.getText());
    }

 

posted @ 2016-05-08 07:29  RunningYY  阅读(545)  评论(2编辑  收藏  举报