1. 程式人生 > >Web自動化測試Selenium 學習筆記(一)

Web自動化測試Selenium 學習筆記(一)

1、Web自動化測試簡介

自動化基礎:自動化用例編寫、Selenium優勢及原理、自動化環境搭建

Selenium基礎:常見8大元素定位(表格)、常見元素處理、下拉框元素處理、不同視窗切換、元素進階、元素等待

需求到框架

    需求分析-用例設計-基礎指令碼-登入/購物指令碼重構-封裝讀取配置檔案-資料驅動-監聽截圖-程式碼分層-框架實現-日誌收集-報告生成-持續整合

2、功能測試和自動化測試的區別

    什麼是功能測試:

        滿足需求找BUG

    什麼是自動化測試:

        編寫程式碼、指令碼讓程式自動執行;減少人工投入,提高工作效率;迴歸測試;系統監控

3、自動化測試流程

    常見的測試流程

        分析測試需求-選擇方案-制定測試計劃-環境-用例準備-編碼-分析結果

4、自動化測試用例和手工測試用例的區別

    手工用例

        ID 模組 前提條件 步驟 預期結果 實際結果

    自動化測試用例 

        ID 模組 前提條件 步驟 預期結果 實際結果 

     但是二者的步驟的精度不一樣 

5、為什麼要做自動化?

    減少人力成本

    完成大量重複性工作

    提高測試效率

    保證工作的一致性,增加信任度

    完成手工不能完成的工作

6、是否適合做自動化?

    時間

    人員

    系統

    領導

7、在什麼情況下做自動化?

    單元測試?    整合測試?    介面測試?    UI測試?

8、什麼樣的專案需要做自動化測試?

    需求變更慢

    週期長

    指令碼可重複利用

9、Selenium簡介

    Selenium 

10、Selenium的優勢以及工作原理

    Selenium的優勢:開源(完全免費)、多瀏覽器 、多平臺、API齊全、瀏覽器內執行

    Selenium的工作原理

        首先它是client即指令碼,指令碼最開始會啟動生成一個driver,然後會啟動生成一個Server即瀏覽器,把我們的瀏覽器繫結在一個埠上,這個時候指令碼我們就可以通過傳送一些session也就是傳送一些請求到Server,然後讓他執行一些事情,把這個請求傳送到瀏覽器的時候,瀏覽器會自動解析client傳送過來的請求,解析完之後會進行相應的操作,執行完之後會根據執行的結果,把這個東西返回給我們的指令碼,如果成功就響應成功了,失敗就失敗了,返回到客戶端,就能看到一個執行結果了

11、常見瀏覽器的啟動

    Firefox瀏覽器啟動(Firefox在webdriver中有自帶驅動)

        import org.openqa.selenium.*;

        import org.openqa.selenium.firefox*;

        WebDriver driver;

        System.setProperty("webdriver.firefox.bin","Firefox的詳細路徑");  //瀏覽器沒有裝在預設路徑時需要此行

        driver = new FirefoxDriver();  //例項化一個物件firefox

        String testUrl = "http://www.baidu.com";

        driver.ger(testUrl);

        driver.quit();

    chrome啟動(chrome在webdriver中沒有自帶驅動)

        import org.openqa.selenium.*;

        import org.openqa.selenium.chrome*;

        WebDriver driver;

        System.setProperty("webdriver.chrome.driver","chrome的詳細路徑");  //瀏覽器沒有裝在預設路徑時需要此行

        driver = new ChromeDriver();  //例項化一個物件

        String testUrl = "http://www.baidu.com";

        driver.ger(testUrl);

        driver.quit();

    IE啟動

        import org.openqa.selenium.*;

        import org.openqa.selenium.InternetExplorerDriver*;

        WebDriver driver;

        System.setProperty("webdriver.ie.driver","IE的詳細路徑");  //瀏覽器沒有裝在預設路徑時需要此行

        driver = new InternetExplorerDriver();  //例項化一個物件

        String testUrl = "http://www.baidu.com";

        driver.ger(testUrl);

        driver.quit();

12、元素定位

    10大定位方法

        By.id     By.name     By.tagName    By.className    By.linkText    By.partialLinkText    By.xpath    By.cssSelector    表格定位    層級定位

    driver.findElement(By.id("kw")).sendKeys("selenium");

    driver.findElement(By.name("wd")).sendKeys("selenium");

    driver.findElement(By.classname("s_ipt")).sendKeys("selenium");

    driver.findElement(By.xpath(".//*[@id='kw']")).sendKeys("selenium");

    driver.findElement(By.cssSelector("#kw")).sendKeys("selenium");

    有很多元素的時候它是會取第一個

    driver.findElement(By.linkText("新聞")).click();

    driver.findElement(By.partialLinkText("新")).click();

    findElement是定位單一的一個元素的方法,定位一組方法我們需要用findElements,findElements是拿到了一個數組

    表格定位:

        String str = "第二行第一列";

        WebElement Table = driver.findElement(By.tagname("table"))

        List<WebElement> rows = Table.findElements(By.tagName("tr"));

        for(WebElement row:rows){

            List<WebElement> tds= row.findElements(By.tagName("td"));

            for(WebElement td:tds){

                String value = td.getText();

                if(value.equals( str)){

                    System.out.pringln(value+"\n");

                }else{

                    System.out.pringln("error"+"\n");

                }

            }

        }

    常見的自動化框架:關鍵字驅動、資料驅動、混合驅動

13、常用API

    開啟網址方式

        Driver.get()

        Driver.navigate.to()

    操作瀏覽器API

        Driver.navigate().refresh()  //重新整理頁面

        Driver.navigate().forward()  //前進

        Driver.navigate().back()  //後退

        Driver.getTitle()

        Driver.getCurrentUrl()  //獲取當前URL

        Driver.manage().window().maximize() //視窗最大化

        Driver.quite()  //瀏覽器關閉,沒有完全關閉,程序中仍佔著

        Driver.close()  //瀏覽器關閉

        滾動條操作

        操作瀏覽器cookie

    輸入框操作API

        SendKeys()

        Clear()

        getText()

        Click()

    選擇框處理

        單選框

        複選框

        下拉框

    特殊視窗操作

        Iframe視窗處理

        彈窗處理

    JS操作

        Js定位

        Js單擊元素

    頁面元素處理

        等待載入

        根據屬性獲取元素值

        獲取物件的css屬性

        獲取物件狀態

            頁面是否顯示isdisplay()

            元素是否存在find_element

            元素是否選中isSelected()

            是否處於灰化狀態isEnabled()

    特殊操作講解

        報錯時截圖儲存

        模擬滑鼠右鍵操作

        滑鼠懸浮

        上傳檔案

        日期控制元件處理

        瀏覽器滾動條操作

14、常見元素處理

    1.輸入框

        sendKeys 

        clear 

        getAttribute 

    2.單選框

        click 

        clear //清楚

        isSelected //是否選中

    3.多選框

        click

        clear

        isSelected

        isEnabled //判斷是否是enable狀態

    4.按鈕

        click 

        isEnabled //判斷是否是enable狀態

    5.表單

        submit

    6.上傳檔案

        sendKeys 

 15、下拉框--選擇元素

    下拉框定位    Select list = new Select(locator);

    下拉框操作    選擇對應的元素    Text Value Index 

                         不選擇對應的元素    deselectAll deselectByvalue deselectByVisibleText

                         獲取選擇項的值    getAllSelectdOptions() getFirstSelectedOption().getText

16、元素進階操作

    滑鼠左擊:

        Actions action = new Actions(driver);

        Action.click().perform();

    滑鼠右擊:

        Actions action = new Actions(driver);

        Action.contextClick().perform();

    滑鼠雙擊:

        Actions action = new Actions(driver);

        Action.doubleClick().perform();

    滑鼠懸停:

        Actions action = new Actions(driver);

        Action.moveToElement().perform();

17、特殊視窗切換

    Iframe處理

        switchTo()

    彈窗處理

        switchTo()

        getWindowHandles()

18、3種等待的分類

    強制等待    Thread.sleep()

        如果呼叫就一直等下去

    顯示等待    

        new WebDriverWait(driver,15).until(

            ExpectedConditions.presenceOfElementLocated(By.cssSelector("css locator"))

        );

        如果在規定時間內找到元素就繼續操作,如果沒有找到就報錯

    隱式等待

        Driver.manager().timeouts.implicitlyWait(10,TimeUnit.SECONDS);

        全域性的,如上10秒以內每隔多少秒去找,找到了就進行下一步

19、自動化測試

    自動化的目的:

        減少人力成本

        完成大量重複工作

        提高測試效率

        保證工作的一致性

        完成手工不能完成的工作

20、Maven的使用

    Maven簡介

        Maven是一個專案管理工具,提供了一整套完整的構建宣告週期框架

    Maven的作用

        構建、文件生成、報告、依賴

21、重構

    重構就是通過調整程式程式碼,但並不改變程式的功能特徵,達到改善軟體的質量、效能,使程式的設計模式和架構更趨合理,更容易被理解,提高軟體的擴充套件性和維護性。