1. 程式人生 > >selenium webdriver 學習總結-Selenium 控制測試流(五)

selenium webdriver 學習總結-Selenium 控制測試流(五)

一、同步測試流

1、隱式等待(不常用)

此等待方式是在查詢元素時,元素沒有立即出現,將等待指定時間後再去查詢DOM,預設為0,一旦設定後,將存在webDriver物件的生命週期中

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

此方法表示如果查詢的元素沒有立即出現,將等待10s後再去查詢DOM,如果元素10s後還不存在,則丟擲異常

2、顯示等待(常用)

相比隱式等待,此方法效率較高,當指定元素沒有立即出現時,它會在指定時間範圍內,500ms進行一次查詢,超出指定時間,則丟擲異常

WebDriverWait 和 ExpectedConditions 類執行顯示等待

ExpectedConditions類提供了很多預定義好的條件來等待,下面介紹幾個比較常用的條件

此條件是檢查某個元素出現在dom中,示例如下:

WebDriverWait wait = new WebDriverWait(driver,10);
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("hello")));

該示例是在檢查id為hello的元素是否存在,如果存在返回這個元素,返回值有兩種,一是boolean值,二是WebElement物件

b .(java.lang.String title)


WebDriverWait wait = new WebDriverWait(driver,10);
Boolean flag = wait.until(ExpectedConditions.titleContains("hello"));

        該示例是在檢查當前頁面標題是否包含hello,返回boolean值

同上操作,返回值為WebElement物件

3、自定義條件等待(常用)

WebDriverWait wait = new WebDriverWait(driver,5);

WebElement hello = wait.until(

   new ExpectedCondition(){

public WebElement apply(WebDriver driver){

return driver.findElement(By.cssSelector("#username"));

}

    }

);

二、檢查元素的狀態

WebElement類提供了以下方法幫助我們來檢查某元素當前狀態

1、isEnabled()檢查元素是否啟用

2、isSelected()檢查元素是否被選中(單選框,多選框,下拉框)

3、isDisplay()檢查元素是否可見

三、處理彈出視窗

1、通過視窗控制代碼來識別彈出視窗

String parentWindow = driver.getWindowHandle();//將父視窗控制代碼儲存在parentWindow變數中

driver.getElementById("popUp").click();//單擊popUp按鈕,彈出新視窗

Set allHandle = driver.getWindowHandles();//得到當前開啟的所有視窗

Iterator iter = allHandle.iterator();

while(iter.hasNext()){

String temp = iter.next();

if(!temp.equals(parentWindow)){

driver.switchTo.window(temp);

}

}

2、通過頁面標題來識別彈出視窗

String parentWindow = driver.getWindowHandle();//將父視窗控制代碼儲存在parentWindow變數中

driver.getElementById("popUp").click();//單擊popUp按鈕,彈出新視窗

Set allHandle = driver.getWindowHandles();//得到當前開啟的所有視窗

Iterator iter = allHandle.iterator();

while(iter.hasNext()){

String temp = iter.next();

if(driver.switchTo.window(temp).getTitle.equals("helloworld")){

driver.switchTo.window(temp);

}

}

3、通過頁面內容來識別彈出視窗

String parentWindow = driver.getWindowHandle();//將父視窗控制代碼儲存在parentWindow變數中

driver.getElementById("popUp").click();//單擊popUp按鈕,彈出新視窗

Set allHandle = driver.getWindowHandles();//得到當前開啟的所有視窗

Iterator iter = allHandle.iterator();

while(iter.hasNext()){

String temp = iter.next();

driver.switchTo.window(temp);

if(driver.getPageSource().contains("helloworld")){

break;

}

}

四、處理js彈出視窗

1、處理js警告框,通過webdriver提供的Alert類處理警告框

driver.findElementById("alert").click();//點選彈出警告框

Alert alertbox = driver.switchTo().alert();

alertBox.accept();

2、處理js確認框

driver.findElementById("alert").click();//點選彈出確認框

Alert alertbox = driver.switchTo().alert();

alertBox.accept();//點選確認

alertBox.dismiss();//點選取消

3、處理JS提示框

driver.findElementById("alert").click();//點選彈出確認框

Alert alertbox = driver.switchTo().alert();

alertBox.sendKeys("helloworld")//向提示框中輸入“helloworld”

alertBox.accept();//點選確認

alertBox.dismiss();//點選取消


五、識別處理frame框架

1、通過id或者name處理frame框架

driver.switchTo().frame("ID");

driver.switchTo().frame("name");

driver.switchTo().defaultContent(); //回到最初的頁面

2、通過index來處理frame

driver.switchTo().frame("index");

六、識別處理iframe框架

step 1:

WebElement element = driver.findElementById("iframe");

step 2:

driver.switchTo().frame(element);