Selenium WebDriver 經常使用API

public class Demo1 {

    WebDriver driver;
    
    @BeforeMethod
    public void visit(){
        //webdriver對象的聲明
        System.setProperty("webdriver.chrome.driver", "e:\\chromedriver.exe");
        driver = new ChromeDriver();
    }
    
    //頁面操做,返回上一個頁面,前進,刷新
    @Test
    public void VisitRecentUrl(){
        String url1 = "http://www.baidu.com";
        String url2 = "http://www.sina.com";
        driver.navigate().to(url1);
        driver.navigate().to(url2);
        driver.navigate().back();//返回到上一個頁面
        driver.navigate().forward();//前進到下一頁面
        driver.navigate().refresh();//刷新當前頁面
        driver.close();
    }
    
    //操做瀏覽器窗口
    @Test
    public void operateBrower(){
        //設置瀏覽器的橫縱座標
        Point point = new Point(150, 150);
        //設置瀏覽器的寬高
        Dimension dimension = new Dimension(500, 500);
        driver.manage().window().setPosition(point);
        driver.manage().window().setSize(dimension);
        System.out.println(driver.manage().window().getPosition());
        System.out.println(driver.manage().window().getSize());
        driver.manage().window().maximize();//窗口最大化
        driver.get("http//www.baidu.com");
        driver.close();
    }
    
    //獲取頁面的title屬性
    @Test
    public void getTitle(){
        driver.get("http://www.baidu.com");
        String title = driver.getTitle();
        System.out.println(title);
        Assert.assertEquals("百度一下,你就知道", title);
        driver.close();
    }
    
    //獲取頁面的URL
    @Test
    public void getCurrentUrl(){
        driver.get("http://www.baidu.com");
        String currentUrl = driver.getCurrentUrl();
        System.out.println(currentUrl);
        driver.close();
    }
    
    //清除文本框中的內容
    //在文本框中輸入指定內容
    @Test
    public void clearText() throws InterruptedException{
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        WebElement input = driver.findElement(By.id("text"));
        Thread.sleep(2000);
        input.clear(); //清除文本框中的內容
        try {
            Thread.sleep(3000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        input.sendKeys("selenium自動化測試");//在文本框中輸入指定內容
        try {
            Thread.sleep(3000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        driver.close();
    }
    
    //單擊按鈕
    @Test
    public void clickButton(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        try {
            Thread.sleep(3000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        WebElement button = driver.findElement(By.id("button"));
        button.click();//單擊按鈕
        driver.close();
    }
    
    //鼠標雙擊元素
    @Test
    public void doubleClick(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        WebElement inputBox = driver.findElement(By.id("inputBox"));
        //聲明Action對象
        Actions builder = new Actions(driver);
        builder.doubleClick(inputBox).build().perform();
        driver.close();
    }
    
    //操做單選下拉列表
    @Test
    public void operateDropList(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        WebElement element = driver.findElement(By.name("fruit"));
        Select dropList = new Select(element);
        //判斷下拉列表是否可多選
        Assert.assertFalse(dropList.isMultiple());
        //斷言當前選中的選項文本是否爲桃子
        Assert.assertEquals("桃子", dropList.getFirstSelectedOption().getText());
        //選中下拉列表中的第2個選項
        dropList.selectByIndex(1);
        Assert.assertEquals("橘子", dropList.getFirstSelectedOption().getText());
        //使用下拉列表選項的value屬性值來選中操做
        dropList.selectByValue("lizhi");
        Assert.assertEquals("荔枝", dropList.getFirstSelectedOption().getText());
        //經過選項的文字來進行操做
        dropList.selectByVisibleText("山楂");
        Assert.assertEquals("山楂", dropList.getFirstSelectedOption().getText());
    }
    
    //檢查單選列表的選項文字是否條預期
    @Test
    public void checkSelectText(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        WebElement element =driver.findElement(By.name("fruit"));
        Select dropList = new Select(element);
        //將下拉列表中指望出現的選項文字存在list集合中,Arrays.asList 將數組轉換爲list對象
        String[] arr = {"桃子","橘子","荔枝","山楂"};
        List<String> expect_option = Arrays.asList(arr);
        //聲明一個新的list,用於存取從頁面上獲取的全部選 項文字
        List<String> act_option = new ArrayList<>();
        for(WebElement option : dropList.getOptions()){
            act_option.add(option.getText());
            //斷言預期對象與實際對象是否徹底一致
            Assert.assertEquals(expect_option.toArray(), act_option.toArray());
        }
    }
    
    //操做多選的選擇列表
    @Test
    public void opertMultiple(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //找到頁面的下拉列表元素
        WebElement element =driver.findElement(By.name("fruit2"));
        Select dropList = new Select(element);
        //判斷下拉列表是否支持多選,支持多選isMultiple返回true
        Assert.assertTrue(dropList.isMultiple());
        //使用選擇索引選擇橘子選項
        dropList.selectByIndex(1);
        //使用選擇value屬性選擇荔枝選項
        dropList.selectByValue("lizhi");
        //使用選項文字選擇山楂
        dropList.selectByVisibleText("山楂");
        
        //取消全部選項的選中狀態
        dropList.deselectAll();
        //再次選中3個數據
        dropList.selectByIndex(1);
        dropList.selectByValue("lizhi");
        dropList.selectByVisibleText("山楂");
        //取消索引爲1的選項
        dropList.deselectByIndex(1);
        //取消value屬性爲lizhi的選項
        dropList.deselectByValue("lizhi");
        //取消選項文字爲山楂的選項
        dropList.deselectByVisibleText("山楂");
        driver.close();
    }
    
    //操做單選框
    @Test
    public void operateRadio(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //查找屬性值爲chengming的單選按鈕對象
        WebElement element = driver.findElement(By.xpath("//input[@value='chengming']"));
        //若是這個單選項未被選中,則執行click()方法選中這個按鈕
        if(!element.isSelected()){
            element.click();
        }
        //斷言屬性值爲chengming的單選按鈕是否處於選中狀態
        Assert.assertTrue(element.isSelected());
        
        //查找name屬性值爲username的全部對象
        List<WebElement> elements = driver.findElements(By.name("username"));
        //查找value屬性爲lisi的單選按鈕對象,若是處於未選中狀態,則執行click方法選中
        for(WebElement element2 : elements){
            if(element2.getAttribute("value").equals("lisi")){
                if(!element2.isSelected()){
                    element2.click();
                    //斷言單選按鈕是否被選中
                    Assert.assertTrue(element2.isSelected());
                    //成功選中後,退出
                    break;
                }
            }
        }
    }
    
    //操做複選框
    @Test
    public void operateCheckBox() throws Exception{
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //查找屬性爲汽車的複選框元素
        WebElement element = driver.findElement(By.xpath("//input[@value='bus']"));
        //若是複選框未選中,則選中
        if(!element.isSelected()){
            element.click();
        }
        Assert.assertTrue(element.isSelected());
        //若是複選框被選中,則取消選中
        /*if(element.isSelected()){
            element.click();
        }
        Assert.assertTrue(element.isSelected());*/
        //查找屬性爲fruit3的元素,並選中
        List<WebElement> list = driver.findElements(By.name("fruit3"));
        for(WebElement checkbox : list){
            checkbox.click();
        }
        Thread.sleep(1000);
        driver.close();
    }
    
    //將當前瀏覽器窗口截屏
    @Test
    public void screen(){
        driver.get("http://www.baidu.com");
        File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(file, new File("e:/testing/test.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    //檢查頁面元素內容是否出現
    @Test
    public void isElementText(){
        //判斷p標籤內容與selenium自動化測試是否徹底匹配
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        WebElement element = driver.findElement(By.xpath("//p[1]"));
        String text = element.getText();
        System.out.println("》》》》》 "+text);
        Assert.assertEquals("selenium自動化測試1", text);
    }
    
    //執行javascript腳本
    @Test
    public void executeJavaScript(){
        driver.get("http:www.baidu.com");
        //聲明一個JavaScript執行對象
        JavascriptExecutor js = (JavascriptExecutor) driver;
        String title = (String) js.executeScript("return document.title");
     //System.out.println("expected"+title);
        Assert.assertEquals("百度一下,你就知道", title);
        
        //String bottonText = (String) js.executeScript("var button = document.getElementById('su').type='hidden';");
        String bottonText = (String) js.executeScript("var button = document.getElementById('su');return button.value");

        System.out.println("》》》》》》"+bottonText);
        Assert.assertEquals("百度一下", bottonText);
        driver.close();
    }
}

 

public class Demo2 {
    
    WebDriver driver;
    
    @BeforeMethod
    public void Visitor(){
        System.setProperty("webdriver.chrome.driver", "e:\\chromedriver.exe");
        driver = new ChromeDriver();
    }
    
    //模擬鍵盤的操做
    @Test
    public void clickKeys(){
        driver.get("http://www.baidu.com");
        Actions action = new Actions(driver);
        action.keyDown(Keys.CONTROL);//按下ctrl鍵
        action.keyDown(Keys.SHIFT);//按下shift鍵
        action.keyDown(Keys.ALT);//按下alt鍵
        
        action.keyUp(Keys.CONTROL);//釋放ctrl鍵
        action.keyUp(Keys.SHIFT);//釋放shift鍵
        action.keyUp(Keys.ALT);//釋放alt鍵
        
        //模擬鍵盤在輸入框中輸入TEST
        action.keyDown(Keys.SHIFT).sendKeys("test").perform();
    }
    
    //模擬鼠標右擊事件
    @Test
    public void rightClickMouse(){
        driver.get("http://www.baidu.com");
        Actions action = new Actions(driver);
        //模擬鼠標右擊事件
        action.contextClick(driver.findElement(By.id("su"))).perform();
        driver.close();
    }
    
    //在指定元素上方進行鼠標懸浮,及點擊懸浮後出現的菜單
    @Test
    public void roverOnElement() throws Exception{
        driver.get("http://www.baidu.com");
        Actions action = new Actions(driver);
        //在指定元素上進行鼠標懸浮
        action.moveToElement(driver.findElement(By.name("tj_briicon"))).perform();;
        Thread.sleep(1000);
        //點擊懸浮後出現的菜單
        driver.findElement(By.linkText("糯米")).click();;
        driver.close();
    }
    
    //查看頁面元素的屬性
    @Test
    public void getWelementAttribute(){
        driver.get("http://www.baidu.com");
        String str = "今每天氣不錯";
        WebElement input = driver.findElement(By.id("kw"));
        input.sendKeys(str);
        String inputText = input.getAttribute("value");
        System.out.println("....."+inputText);
        Assert.assertEquals(inputText,"今每天氣不錯");
        driver.close();
    }
    
    //獲取頁面元素的css屬性
    @Test
    public void getWelementCss(){
        driver.get("http://www.baidu.com");
        WebElement input = driver.findElement(By.id("kw"));
        String cssValue = input.getCssValue("width");
        System.out.println("..... "+cssValue);
        driver.close();
    }
    
    //經常使用的顯式等待
    @Test
    public void testWait(){
        //聲明一個WebDriverWait對象,設置最長等待時間爲10秒
        WebDriverWait wait = new WebDriverWait(driver, 10);
        //判斷頁面title是否包含「測試頁面」4個字
        String str = "測試頁面";
        wait.until(ExpectedConditions.titleContains("測試頁面"));
        System.out.println("頁面標題出現了‘測試頁面’4個字");
    }
    
    
    /**
     * 判斷頁面元素是否存在
     * @param by
     * @return
     */
    //提供一個頁面元素是否存在的方法
    public boolean isEelement(By by){
        WebElement element = driver.findElement(by);
        if(element != null){
            return true;
        }
        return false;
    } 
    
    @Test
    public void testIsEelement(){
        driver.get("http://www.baidu.com");
        //System.out.println(driver.getTitle());
        if(isEelement(By.id("kw"))){
            WebElement webElement = driver.findElement(By.id("kw"));
            if(webElement.isEnabled()){
                webElement.sendKeys("百度的首頁搜索框被成功找到");
            }
        }else { //將測試用例設置爲失敗,並打印失敗緣由
            Assert.fail("頁面的輸入框元素未找到");
        }
        driver.close();
    }
    
    //使用title屬性識別和操做新彈出的瀏覽器窗口
    @Test
    public void operteWindow(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //將當前瀏覽器窗口句柄存在一個變量中
        String parentWindowHandle = driver.getWindowHandle();
        //點擊頁面上的連接地址
        driver.findElement(By.xpath("//a")).click();
        //獲取當前全部打開的窗口的句柄,並存在set中
        Set<String> windowHandles = driver.getWindowHandles();
        if(windowHandles != null){
            for(String windowHandle : windowHandles){
                if(driver.switchTo().window(windowHandle).getTitle().equals("百度一下,你就知道")){
                    driver.findElement(By.id("kw")).sendKeys("百度的首頁瀏覽器窗口被找到");
                }else {
                    Assert.fail("百度的首頁瀏覽器窗口未被找到");
                }
                //返回到最開始打開的瀏覽器窗口
                driver.switchTo().window(parentWindowHandle);
                Assert.assertEquals(driver.getTitle(),"測試頁面");
            }
        }
    }
    
    //使用頁面的文字內容識別和處理新彈出的瀏覽器窗口
    @Test
    public void operteWindowByPageSource(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //將當前瀏覽器窗口句柄存在一個變量中
        String parentWindowHandle = driver.getWindowHandle();
        //點擊頁面上的連接地址
        driver.findElement(By.xpath("//a")).click();
        //獲取當前全部打開的窗口的句柄,並存在set中
        Set<String> windowHandles = driver.getWindowHandles();
        for(String windowHandle : windowHandles){
            try {
                if(driver.switchTo().window(windowHandle).getPageSource().contains("百度一下")){
                    driver.findElement(By.id("kw")).sendKeys("百度首頁的瀏覽器窗口被找到");
                }
            } catch (NoSuchWindowException e) {
                e.printStackTrace();
            }
        }
        //返回到最開始打開的瀏覽器窗口
        driver.switchTo().window(parentWindowHandle);
        Assert.assertEquals(driver.getTitle(),"測試頁面");
    }
    
    //操做javascript的Alter窗口
    @Test
    public void operteAlert(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //查找到按鈕元素
        WebElement button = driver.findElement(By.name("btn"));
        button.click();
        
        try {
            //獲取alert對象
            Alert alert = driver.switchTo().alert();
            Assert.assertEquals("這是一個alert彈窗", alert.getText());
            //關閉彈窗
            alert.accept();
        } catch (NoAlertPresentException e) {
            Assert.fail("頁面alert彈窗未找到");
            e.printStackTrace();
        }
    }
    
    //操做javascript的confirm窗口
    @Test
    public void operteConfirm(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        driver.findElement(By.name("confirmbtn")).click();
        
        try {
            Alert alert = driver.switchTo().alert();
            Assert.assertEquals("這是一個confirm彈窗", alert.getText());
            alert.accept(); // 點擊肯定,關閉彈出窗
            //alert.dismiss(); // 點擊取消,關閉彈出窗
        } catch (NoAlertPresentException e) {
            Assert.fail("頁面confirm彈窗未找到");
            e.printStackTrace();
        }
    }
    
    // 操做javascript的prompt窗口
    @Test
    public void opertePrompt() throws Throwable {
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        driver.findElement(By.name("promptbtn")).click();

        try {
            Alert alert = driver.switchTo().alert();
            Assert.assertEquals("這是一個prompt彈窗", alert.getText());
            alert.sendKeys("好好學習,每天向上");
            Thread.sleep(3000);
            alert.accept();
        } catch (NoAlertPresentException e) {
            Assert.fail("頁面prompt彈窗未找到");
            e.printStackTrace();
        }
    }
    
    /**
     * 操做iframe中的頁面元素
     */
    @Test
    public void testFrame(){
        driver.get("file:///F:/workspace/selenium_day01/frameset.html");
        //必須先進入左側frame_left.html頁面
        driver.switchTo().frame("leftframe");
        //找到頁面上的p標籤
        WebElement leftFrameText = driver.findElement(By.xpath("//p"));
        Assert.assertEquals("這是左側 frame 頁面上的文字", leftFrameText.getText());
        
        //從左側返回到frame_left頁面  若是不調用 defaultContent()方法,沒法從frame_left進入其餘頁面
        driver.switchTo().defaultContent();
        //進入frame_middle頁面
        driver.switchTo().frame("middleframe");
        WebElement middleFrameText = driver.findElement(By.xpath("//p"));
        Assert.assertEquals("這是中間 frame 頁面上的文字", middleFrameText.getText());
        
        driver.switchTo().defaultContent();
        driver.switchTo().frame("rightframe");
        WebElement rightFrameText = driver.findElement(By.xpath("//p"));
        Assert.assertEquals("這是右側 frame 頁面上的文字", rightFrameText.getText());
        
        driver.switchTo().defaultContent();
        driver.switchTo().frame(1);
        WebElement text = driver.findElement(By.tagName("p"));
        //System.out.println(">>>>>>"+ text.getText());
        Assert.assertEquals("這是中間 frame 頁面上的文字", text.getText());
        driver.close();
    }
    
    //使用frame中的html源碼內容來操做frame
    @Test
    public void testHandleFarme(){
        driver.get("file:///F:/workspace/selenium_day01/frameset.html");
        //找到全部frame標籤的內容
        List<WebElement> frames = driver.findElements(By.tagName("frame"));
        for(WebElement frame : frames){
            driver.switchTo().frame(frame);
            //判斷frame頁面源碼中是否包含「中間 frame」
            if(driver.getPageSource().contains("中間 frame")){
                //找到頁面P標籤頁面對象
                WebElement text = driver.findElement(By.xpath("//p"));
                Assert.assertEquals("這是中間 frame 頁面上的文字", text.getText());
                break;
            }else {
                //返回frameset頁面
                driver.switchTo().defaultContent();
            }
        }
        driver.switchTo().defaultContent();
        driver.close();
    }
}

 

public class Demo3 {
    WebDriver driver;
    
    @BeforeMethod
    public void Visitor(){
        System.setProperty("webdriver.chrome.driver", "e:\\chromedriver.exe");
        driver = new ChromeDriver();
    }
    
    // 在指定元素上方進行鼠標懸浮,及點擊懸浮後出現的菜單
    @Test
    public void roverOnElement() throws Exception {
        driver.get("http://www.baidu.com");
        Actions action = new Actions(driver);
        // 在指定元素上進行鼠標懸浮
        action.moveToElement(driver.findElement(By.name("tj_briicon"))).perform();
        Thread.sleep(1000);
        // 點擊懸浮後出現的菜單
        driver.findElement(By.linkText("糯米")).click();
        ;
        driver.close();
    }
    
    // 使用frame中的html源碼內容來操做frame
    @Test
    public void testHandleFarme() {
        driver.get("file:///F:/workspace/selenium_demo/src/main/webapp/frameset.html");
        // 找到全部frame標籤的內容
        List<WebElement> frames = driver.findElements(By.tagName("frame"));
        for (WebElement frame : frames) {
            driver.switchTo().frame(frame);
            // 判斷frame頁面源碼中是否包含「中間 frame」
            if (driver.getPageSource().contains("中間 frame")) {
                // 找到頁面P標籤頁面對象
                WebElement text = driver.findElement(By.xpath("//p"));
                Assert.assertEquals("這是中間 frame 頁面上的文字", text.getText());
                break;
            } else {
                // 返回frameset頁面
                driver.switchTo().defaultContent();
            }
        }
        driver.switchTo().defaultContent();
        driver.close();
    }
    
    //操做iframe的頁面元素
    @Test
    public void testHandleFarme2(){
        driver.get("file:///F:/workspace/selenium_demo/src/main/webapp/frameset.html");
        driver.switchTo().frame("leftframe");
        //找到包含「這是iframe 頁面上的文字」的元素對象
        WebElement iframe = driver.findElement(By.tagName("iframe"));
        //進入iframe頁面區域
        driver.switchTo().frame(iframe);
        //在iframe頁面找p標籤的頁面元素
        WebElement p = driver.findElement(By.xpath("//p"));
        Assert.assertEquals("這是iframe 頁面上的文字", p.getText());
        driver.close();
    }
    
    //操做瀏覽器的cookie
    @Test
    public void testCookie(){
        driver.get("http://www.baidu.com");
        //獲得當前頁面下全部的cookie,並輸出所在域、name、value、有效時期和路徑
        Set<Cookie> cookies = driver.manage().getCookies();
        Cookie cookie = new Cookie("cookieName", "cookieValue");
        System.out.println(String.format("Domain->name->value->expiry->path"));
        for(Cookie cookie2 : cookies){
            System.out.println(String.format(
                    "%s->%s->%s->%s->%s",
                    cookie2.getDomain(),
                    cookie2.getName(),
                    cookie2.getValue(),
                    cookie2.getExpiry(),
                    cookie2.getPath()
                    ));
        }
        //刪除cookie  
        //經過cookie的namen屬性刪除
        driver.manage().deleteCookieNamed("cookieName");
        //經過cookie對象刪除
        driver.manage().deleteCookie(cookie);
        //刪除所有cookie
        driver.manage().deleteAllCookies();
    }
}
相關文章
相關標籤/搜索