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);