和我一塊兒學 Selenium WebDriver(5)——基礎篇

前面的學習已經讓咱們能夠輕鬆的運行js、點擊節點,下面該學習如何控制 alert、confirm 和 彈出窗口這些了

【一、如何處理 confirm 和 alert】 
處理 confirm、alert 其實很簡單,只須要利用 WebDriver 的 switchTo().alert() 方法就能夠輕鬆切換到 alert 對象 Alert,進行控制。
咱們直接利用 高級增刪改查 的Demo 測試 alert 和 confirm,順便還使用 sendKeys 進行文字錄入的操做

package lesson5;

import static org.junit.Assert.*;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class ExampleForAlert  {
	
    static WebDriver driver;
    
    @BeforeClass
    public static void init() {
    	System.out.println("init...");
    	// 若是你的 FireFox 沒有安裝在默認目錄,那麼必須在程序中設置
    	System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe");
    	// 建立一個 FireFox 的瀏覽器實例
    	driver = new FirefoxDriver();
    }
	
    @Test
    public void test() {
    	// 讓瀏覽器訪問 zTree Demo
    	driver.get("http://www.ztree.me/v3/demo/cn/exedit/edit_super.html");
    	
    	// 等待 zTree 初始化完畢,Timeout 設置10秒
    	try {
    		(new WebDriverWait(driver, 10, 500)).until(new ExpectedCondition<Boolean>() {
    			public Boolean apply(WebDriver d) {
    				WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#treeDemo li').get(0);");
    				return element != null;
    			}
    		});
    		
    	} catch(Exception e) {
    		e.printStackTrace();
    	}
    	
    	((JavascriptExecutor)driver).executeScript("window.zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');"
    			+ "window.zTreeNode = window.zTreeObj.getNodes()[0];"
    			+ "window.zTreeObj.selectNode(window.zTreeNode);");
    	
    	//點擊編輯按鈕,彈出 confirm
    	WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_edit').get(0);");
    	element.click();
    	
    	//第一次點擊取消
    	Alert alert = driver.switchTo().alert();
    	System.out.println(alert.getText());
    	alert.dismiss();
    	element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_input').get(0);");
    	assertNull(element);
    	
    	//點擊編輯按鈕,彈出 confirm
    	element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_edit').get(0);");
    	element.click();
    	
    	//第二次點擊肯定
    	alert = driver.switchTo().alert();
    	alert.accept();
    	element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_input').get(0);");
    	assertNotNull(element);
    	
    	//修改name
    	for (int i=0, j=element.getAttribute("value").length(); i<j; i++) {
    		element.sendKeys(Keys.BACK_SPACE);
    	}
    	element.sendKeys(Keys.RETURN);
    	
    	//肯定 提示信息
    	alert = driver.switchTo().alert();
    	alert.accept();
    	
    	//修改name
    	element.sendKeys("test");
    	element.sendKeys(Keys.RETURN);
    	String newName = (String) ((JavascriptExecutor)driver).executeScript("return window.zTreeNode.name");
    	assertEquals(newName, "test");
    	
    }
    
    @AfterClass
    public static void destory() {
    	System.out.println("destory...");
    	//關閉瀏覽器
    	driver.quit();
    }
}

【二、如何處理 彈出頁面】
彈出窗口的捕獲,一樣須要利用 switchTo 方法,這裏面須要注意的是——新彈出窗口後,仍是要稍微等待一下;若是不等待一下子,直接獲取新窗口的 url 你會獲得 about:blank 這樣的結果

package lesson5;


import java.util.Iterator;
import java.util.Set;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class ExampleForNewWindow  {
	
    static WebDriver driver;
    
    @BeforeClass
    public static void init() {
    	System.out.println("init...");
    	// 若是你的 FireFox 沒有安裝在默認目錄,那麼必須在程序中設置
    	System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe");
    	// 建立一個 FireFox 的瀏覽器實例
    	driver = new FirefoxDriver();
    }
	
    @Test
    public void test() {
    	// 讓瀏覽器訪問 zTree Demo
    	driver.get("http://www.ztree.me/v3/demo/cn/core/url.html");
    	
    	// 等待 zTree 初始化完畢,Timeout 設置10秒
    	try {
    		(new WebDriverWait(driver, 10, 500)).until(new ExpectedCondition<Boolean>() {
    			public Boolean apply(WebDriver d) {
    				WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#treeDemo li').get(0);");
    				return element != null;
    			}
    		});
    		
    	} catch(Exception e) {
    		e.printStackTrace();
    	}
    	
    	((JavascriptExecutor)driver).executeScript("window.zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');"
    			+ "window.zTreeNode = window.zTreeObj.getNodes()[0];");
    	
    	//點擊第一個節點,彈出 zTree 官網
    	WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_a').get(0);");
    	element.click();
    	
    	//等待5秒,確保新頁面加載完畢
    	try {
    		(new WebDriverWait(driver, 5, 1000)).until(new ExpectedCondition<Boolean>() {
    			public Boolean apply(WebDriver d) {
    				return false;
    			}
    		});
    		
    	} catch(Exception e) {}

    	//當前窗口的 Handle
    	String curWindow = driver.getWindowHandle();
    	//所有窗口的 Handle 集合
    	Set<String> wins = driver.getWindowHandles();
    	Iterator<String> itWin = wins.iterator();
    	while(itWin.hasNext()) {
    		String key = itWin.next();
    		if (curWindow.equals(key)) {
    			continue;
    		}
    		WebDriver newDriver = driver.switchTo().window(key);
    		System.out.println("new Window: " + newDriver.getCurrentUrl());
    	}
    	
    }
    
    @AfterClass
    public static void destory() {
    	System.out.println("destory...");
    	//關閉瀏覽器
    	driver.quit();
    }
}

【三、另外一種切換到 iframe 的方法】

今天主要接觸了 switchTo 方法,使用這個方法,就能夠直接切換到 iframe 窗口內,切換後使用js 時就能夠把 iframe 當作當前的主窗口來使用了 php

package lesson5;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class ExampleForIframe2  {
	
    static WebDriver driver;
    
    @BeforeClass
    public static void init() {
    	System.out.println("init...");
    	// 若是你的 FireFox 沒有安裝在默認目錄,那麼必須在程序中設置
    	System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe");
    	// 建立一個 FireFox 的瀏覽器實例
    	driver = new FirefoxDriver();
    }
	
    @Test
    public void test() {
    	// 讓瀏覽器訪問 zTree Demo
    	driver.get("http://www.ztree.me/v3/demo.php#_102");
    	
    	// 等待 iframe 加載完畢,Timeout 設置10秒
    	try {
    		(new WebDriverWait(driver, 10, 500)).until(new ExpectedCondition<Boolean>() {
    			public Boolean apply(WebDriver d) {
    				Boolean loaded = (Boolean) ((JavascriptExecutor)driver).executeScript("return !!demoIframe.$.fn.zTree.getZTreeObj('treeDemo');");
    				return loaded;
    			}
    		});
    		
    	} catch(Exception e) {
    		e.printStackTrace();
    	}
    	
    	driver.switchTo().frame("demoIframe");
    	
    	((JavascriptExecutor)driver).executeScript("window.zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');");
    	
    	//利用 expandNode 方法展開第2個根節點
    	((JavascriptExecutor)driver).executeScript("window.zTreeNode = window.zTreeObj.getNodes()[1]; window.zTreeObj.expandNode(window.zTreeNode, true);");
    	
    	// 等待 5 秒
    	try {
    		(new WebDriverWait(driver, 5, 1000)).until(new ExpectedCondition<Boolean>() {
    			public Boolean apply(WebDriver d) {
    				return false;
    			}
    		});
    		
    	} catch(Exception e) {}
    	
    }
    
    @AfterClass
    public static void destory() {
    	System.out.println("destory...");
    	//關閉瀏覽器
    	driver.quit();
    }
}
相關文章
相關標籤/搜索