Selenium自動化實現web自動化-1

成子吃橙子發表於2021-09-12

框架搭建

基於maven+jdk8+junit5+seleium 構建 

 <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>  
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
            <version>2.9.9</version>
        </dependency> 
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-runner</artifactId>
            <version>1.5.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.6.0</version>
            <scope>compile</scope>
        </dependency>
       <dependency>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-java-commons</artifactId>
            <version>2.13.5</version>
            <scope>compile</scope>
        </dependency> 
 </dependencies>

驅動下載

下載地址 :http://chromedriver.storage.googleapis.com/index.html

Selenium自動化實現web自動化-1基於當前 瀏覽器的版本

測試demo

@Test
public void test1() throws IOException {
    ChromeDriver driver = new ChromeDriver();
    System. setProperty("webdriver.chrome.driver", "path");
    //設定全屏
    driver.manage().window().maximize();
    driver.get("https://home.testing-studio.com/");
    //d.findElement(By.cssSelector(". d-button-abl").cick();
    driver.findElement(By.xpath("//span[contains(text(),'登入')]")).click();
    snapshot((TakesScreenshot)driver, "截圖"+FakerUtils.getTimeStamp()+".jpg");
}

截圖方法:TakesScreenshot介面是依賴於具體的瀏覽器API操作的

// 截圖方法
public static void snapshot(TakesScreenshot drivername, String filename) {
    String currentPath = System.getProperty("user.dir"); //get current work folder
    System.out.println(currentPath);
    File scrFile = drivername.getScreenshotAs(OutputType.FILE);
    try {
        System.out.println("save snapshot path is:"+currentPath+"/"+filename);
        FileUtils.copyFile(scrFile, new File(currentPath+"\\"+filename));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        System.out.println("Can't save screenshot");
        e.printStackTrace();
    } finally {
        System.out.println("screen shot finished");
    }
}

執行

Selenium自動化實現web自動化-1

用列錄製

使用seleniumIDE 錄製

Selenium自動化實現web自動化-1
  1. 新建一個錄製project
Selenium自動化實現web自動化-1
Selenium自動化實現web自動化-1

輸入網站開始錄製,並在錄製的網頁上執行搜尋

Selenium自動化實現web自動化-1
Selenium自動化實現web自動化-1錄製結果

當Test越來越多時,可以將多個Test歸類到Suites中,Suites就像小櫃子

建立專案時,IDE會建立一個預設Suite,並將第一個Test新增到其中,你可以點選Test,在下拉選單中選中Test suites進入Suites管理介面

首先進入Suites管理介面,點選`+`,提供名稱,然後單擊add:

將滑鼠懸停在`suite1`上,點選三個點彈出Suites管理選單:

可以對`suite1`進行管理,包括新增test,重新命名,刪除,設定,匯出

Selenium自動化實現web自動化-1匯出的用例

用例的編寫

public class testCase {
    public static WebDriver driver;
    @BeforeAll
    static void initData(){
        //載入驅動
        driver=new ChromeDriver();
        // 設定全域性隱式等待 5S
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    }

    @Test
    void Login(){
        //讀取測試連結
        driver.get("https://home.testing-studio.com/");
        //獲取登入按鈕
        driver.findElement(By.xpath("//span[contains(text(),'登入')]")).click();
        driver.manage().window().maximize();
        //清理記住的原賬號與密碼
        driver.findElement(By.id("login-account-name")).clear();
        driver.findElement(By.id("login-account-name")).sendKeys("*");

        driver.findElement(By.id("login-account-password")).clear();
        driver.findElement(By.id("login-account-password")).sendKeys("*");
        driver.findElement(By.id("login-button")).click();
        // 截圖
        FakerUtils.snapshot((TakesScreenshot)driver,"截圖"+FakerUtils.getTimeStamp()+".jpg");
    }

    @AfterAll
    static void tearDown(){
        driver.quit();
    }

}
Selenium自動化實現web自動化-1定位方法

執行分析:

Driver的初始化,每個測試用例執行都可以通過這個一個方法獲得一個driver.get()開啟一個網址

find_element(By.定位符,")

一個頁面還沒有完全載入完全,點選這個元素,發現這個元素是有問題的,元素找不到或者不可點選,等等,可以強行加sleep(不推薦)

每個元素定位的時候,都會去find_element查詢一個元素,在這個時候,通常我們需要引入一個新的機制,這個機制叫做隱式等待,解決元素找不到的問題,在規定的時間內,自動的去等待元素的出現,元素找到了,但是狀態不對,不可點選也會報錯

等待方式

隱式等待:

設定一個等待時間輪詢(預設0.5s)查詢 元素是否出現 (服務端)

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

顯式等待:

在客戶端本地每隔0.5s巡查下條件是否匹配 需要 例項化 webdriverwait

在程式碼中定義等待條件,當條件發生時才繼續執行程式碼`WebDriverWait`配合until()方法,根據判斷條件進行等待

程式每隔一段時間(預設為0.5秒)進行條件判斷,如果條件成立,則執行下一步,否則繼續等待,直到超過設定的最長時間

webDriverWait= new WebDriverWait(driver,100L);

強制等待

執行緒等待,執行緒休眠一段時間,Thread.sleep(2000)

 

相關文章