Selenium WebDriver進階用法 - 選擇合適的WebDrvier_selenium

來源:互聯網
上載者:User

轉自:http://www.open-open.com/lib/view/open1402625607337.html

選擇合適的WebDrvier

WebDriver是一個介面,它有幾種實現,分別是HtmlUnitDrvier、FirefoxDriver、InternetExplorerDriver、ChromeDriver、OperaDriver,除了 InternetExplorerDriver只能在Windows平台運行,其他WebDriver均能跨平台。

如果追求運行速度,HtmlUnitDriver是首選,但是它沒有運行介面,不能即時看到運行效果。如果想看到運行效果,可以使用FirefoxDrvier,它會真正開啟瀏覽器,在螢幕上運行,因此我們可以監測頁面元素的位置、CSS的值等,但是代價就是速度慢。

這裡為了簡單,使用 HtmlUnitDriver.

WebDriver  driver = new HtmlUnitDriver();

導航

有了WebDriver執行個體,第一件事情就是開啟頁面。一般的做法是調用get方法:

driver.get("http://www.yeetrack.com");

WebDriver會一直等待,直到頁面載入完畢(也就是”onload”方法釋放)。

和頁面進行互動 僅僅開啟頁面還不夠,我們需要的是在頁面上進行操作,進一步講就是要操作頁面中的html元素,如:

<input type="text" name="passwd" id="passwd-id" />
要操作頁面元素,首先要定位元素,可以通過多種方法定位,如下:
 
 
WebElement element;element = driver.findElement(By.id("passwd-id"));element = driver.findElement(By.name("passwd"));element = driver.findElement(By.xpath("//input[@id='passwd-id']"));

定位元素時,有兩點要注意。通過text的值來定位一個Link時,text必須精確匹配;通過xpath來定位元素時,如果匹配到多條,只會返回第一條結果,如果沒有匹配到,會拋 NoSuchElementException 異常。
WebDriver擁有”Object-baseed” API,我們可以使用WebElement來表示所有的頁面元素。WebElement類有很多操作元素的方法,但是有些方法可能對當前元素無效,不用擔 心,WebDriver會儘力幫我們處理。如,對一個”meta”標籤元素,我們調用了WebElement的”SetSelected()”方 法,WebDriver會拋出異常。

我們定位到一個Element,接下來,我們可能要進行一些操作,如想鍵入一些字元:

element.sendKeys("sone text");

當然,我們也可以通過”Keys”這個類,來類比鍵盤輸入:

element.sendKeys(" and some", Keys.ARROW_DOWN);

記住,我們向這些元素輸入的字串,它們不會自動清空,也就是說調用”sendKeys()”方法,就是向元素中追加字串。如果要清空一個input標籤或者textarea:

element.clear();

填寫表單

已經知道了如何鍵入字串,那麼其他元素呢。如checkboxes,如何選中;”OPTION”標籤,如何設定”setSelected()”。下面是處理Select標籤的例子:

WebElement select = driver.findElement(By.xpath("//select"));List<WebElement> allOptions = select.findElements(By.tagName("option"));for(WebElement option : allOptions){    System.out.println(String.format("Value is " %s, option.getAttribute("value")));    option.click();}

上面的代碼,首先定位一個Select元素,然後擷取它下面的所有option,並且列印出來,執行一個click操作。明顯,如果想選中某個選 中,這種方法不是最佳選擇。其實WebDrvier定義了Select類,它提供一些更快捷的方式, 如”selectByIndex()”、”selectByValue()”。

表單填寫完畢,然後就是提交,我們可以通過點擊提交按鈕,進行提交。

driver.findElement(By.id("submit")).click();
或者,WebElement提供”submit()”這個方法,如果當前元素處在form表單中,調用該元素的submit方法,WebDriver就會自動認可這個表單;如果不處於form表單中,會拋出”NoSuchElementException”異常。

element.submit();

拖放

WebDriver允許我們拖放元素,如將某個元素拖到其他地方、或者將某個元素拖到其他元素上。

WebElement element = driver.findElement(By.name("source"));WebElement element = driver.findElement(By.name("target"));(new Actions(driver)).dragAndDrop(element, target).perform();

切換window或者Frame

對於現在的web應用程式來說,很少有單個window的情況,都是嵌入了其他的frame。WebDrvier支援使用”switchTO”方法切換到其他window。

driver.switchTo().window.("windowName");

上面的代碼執行後,driver就會切換到windowName這個window。但是如何擷取windowName呢。來一個例子:

<a href="http://www.yeetrack.com" target="windowName">點擊開啟新視窗</a>

還有,我們可以通過”window handle”來切換,並且還可以遍曆當前所有的window

for(String handle : driver.getWindowHandles()){    driver.switchTo().window(handle);}

切換frame(或者iframe)

driver.switchTo().frame("frameName");
switchTo()可以鏈式調用,或者通過index來切換

drvier.switchTo().frame("frameName")      .switchTo().frame(0)      .switchTo().frame("child");
上面的語句執行後,driver會進入”frameName”這個frame,然後進入到第一個子frame,然後再進入到這個子frame的名稱是”child”的frame中。如果要回到頂級的frame,執行下面的代碼:

driver.switchTo().defaultContent();

導航:History和Location

早先,我們使用WebDriver的get方法,開啟了”http://www.yeetrack.com”。WebDriver提供一些介面,其中一個如下:

driver.navigate().to("http://www.yeetrack.com");
“navigate().to()”和”get()”方法,實現的功能完全一樣,只不過”get()”拼字起來更簡單。

“navigete”介面,還可以控制瀏覽器的前進和後退:

driver.navigate().forward();driver.navigate().back();
請注意,這個功能完全依賴於底層的瀏覽器。如果兩種瀏覽器的行為不一致,那麼代碼執行的效果也會不一致。

Cookies

瀏覽器的安全性測試,cookie是不能跨域的,所以你想操作A網域名稱的cookie,首先你要讓切換到A網域名稱上。

//開啟網域名稱driver.get("http://www.yeetrack.com");//添加CookieCookie cookie = new Cookie("uuid", "abcdedfjeiajfei");driver.manage().addCookie(cookie);//遍曆當前網域名稱的cookieSet(Cookie) allCookies = driver.manage().getCookies();for(Cookie loadedCookie : allCookies){    System.out.println(String.format("%s ---> %s", loadedCookie.getName(), loadedCookie.getValue()));}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.