(51Testing軟件測(cè)試網(wǎng)獲人民郵電出版社和作者授權(quán)連載本書(shū)部分章節(jié)。任何個(gè)人或單位未獲得明確的書(shū)面許可,不得對(duì)本文內(nèi)容復(fù)制、轉(zhuǎn)載或進(jìn)行鏡像,否則將追究法律責(zé)任。)
5.5.7 XPath(xPathToFind)
如果以上查找方法都無(wú)法定位到指定對(duì)象,那么可以按XPath進(jìn)行查找。例如,百度首頁(yè)有文本框,如圖5-35所示。

圖5-35 百度搜索文本框
其HTML代碼如下:
<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off"> |
如要操作該文本框,則可以通過(guò)其XPath表達(dá)式“//input[@id='kw']”作為查找條件獲取該對(duì)象,找到該文本框,然后再輸入文本,例如程序清單5-27和程序清單5-28所示的代碼。
程序清單5-27 C#代碼
IWebDriver driver = new FirefoxDriver(); INavigation navigation = driver.Navigate(); navigation.GoToUrl(http://www.baidu.com); IWebElement baiduTextBox = driver.FindElement(By.XPath("http://input[@id='kw']")); baiduTextBox.SendKeys("找到文本框"); |
程序清單5-28 Java代碼
WebDriver driver = new FirefoxDriver(); Navigation navigation = driver.navigate(); navigation.to(http://www.baidu.com); WebElement baiduTextBox = driver.findElement(By.xpath("http://input[@id='kw']")); baiduTextBox.sendKeys("找到文本框"); |
5.6 操作頁(yè)面元素WebElement
在Selenium 1中,直接通過(guò)Selenium的各種方法來(lái)操作頁(yè)面元素,但在Selenium 2中則不同,需要通過(guò)上5.5講到的By對(duì)象先定位到對(duì)應(yīng)的頁(yè)面元素,然后調(diào)用這個(gè)頁(yè)面元素的相關(guān)方法來(lái)進(jìn)行操作。
可以通過(guò)WebDriver的FindElement()方法獲得WebElement的對(duì)象實(shí)例。
在獲取頁(yè)面元素后,就可以對(duì)該頁(yè)面元素進(jìn)行各種操作了。
5.6.1 Click()
Click()方法用于執(zhí)行單擊元素的操作。例如,百度首頁(yè)上有“登錄”超級(jí)鏈接,如圖5-36所示。

圖5-36 登錄按鈕
要單擊“登錄”超級(jí)鏈接,代碼如程序清單5-29或程序清單5-30所示/
程序清單5-29 C#代碼
IWebDriver driver = new FirefoxDriver(); INavigation navigation = driver.Navigate(); navigation.GoToUrl(http://www.baidu.com); IWebElement baiduLogin = driver.FindElement(By.LinkText("登錄")); baiduLogin.Click(); |
程序清單5-30 Java代碼
WebDriver driver = new FirefoxDriver(); Navigation navigation = driver.navigate(); navigation.to(http://www.baidu.com); WebElement baiduLogin = driver.findElement(By.LinkText("登錄")); baiduLogin.click(); |
在執(zhí)行“WebElement baiduLogin = driver.findElement(By.LinkText("登錄"));”時(shí),程序先通過(guò)“driver.findElement(By.LinkText("登錄"));”找到該按鈕,然后將其賦值給變量baiduLogin。baiduLogin就是獲取到的頁(yè)面元素,它代表“登錄”按鈕,獲取到它之后就可以對(duì)它進(jìn)行各種操作了,例如單擊操作baiduLogin.click()。
注意,在Selenium 2中沒(méi)有Check/UnCheck這類(lèi)方法來(lái)勾選或取消復(fù)選框和單選框,所以只能通過(guò)Click方法來(lái)進(jìn)行勾選或取消勾選。例如,百度貼吧的頁(yè)面上有“記住我的登錄狀態(tài)”復(fù)選框如圖5-37所示。

只能使用Click()方法對(duì)其進(jìn)行勾選,如程序清單5-31和程序清單5-32所示。
程序清單5-31 C#代碼
IWebDriver driver = new FirefoxDriver(); INavigation navigation = driver.Navigate(); navigation.GoToUrl(http://tieba.baidu.com/index.html); IWebElement rememberMe = driver.FindElement(By.Id("pass_loginLite_input_isMem0")); rememberMe.Click(); |
程序清單5-32 Java代碼
WebDriver driver = new FirefoxDriver(); Navigation navigation = driver.navigate(); navigation.to(http://tieba.baidu.com/index.html); WebElement rememberMe = driver.findElement(By.id("pass_loginLite_input_isMem0")); rememberMe.click(); |
對(duì)于Selenium 2來(lái)說(shuō),因?yàn)轫?yè)面元素沒(méi)有Select方法,所以也只能用Click模擬實(shí)現(xiàn)對(duì)下拉列表框的選擇。以百度貼吧搜索為例,如圖5-38所示,假設(shè)要在排序方式下拉列表框中選擇“按相關(guān)性進(jìn)行排序”。
其HTML代碼如圖5-39所示。
可以編寫(xiě)代碼即可選擇“按相關(guān)性進(jìn)行排序”,如程序清單5-33和程序清單5-34所示。

圖5-38 搜索排序下拉列表框

圖5-39 下拉列表框的HTML代碼
5.6.3 Clear()
Clear()方法用于清空input元素的值。例如,百度首頁(yè)有搜索文本框,如圖5-42所示。

圖5-42 百度首頁(yè)搜索文本框
可以先給文本框填入內(nèi)容,然后使用Clear()將其清除,清除前先使用Thread.Sleep(3000)等待3秒,以便于觀察),代碼如程序清單5-37和程序清單5-38所示。
程序清單5-37 C#代碼
IWebDriver driver = new FirefoxDriver(); INavigation navigation = driver.Navigate(); navigation.GoToUrl(http://www.baidu.com); IWebElement baiduTextBox = driver.FindElement(By.XPath("http://input[@id='kw']")); baiduTextBox.SendKeys("找到文本框"); System.Threading.Thread.Sleep(3000); baiduTextBox.Clear(); |
程序清單5-38 Java代碼
WebDriver driver = new FirefoxDriver(); Navigation navigation = driver.navigate(); navigation.to("http://www.baidu.com"); WebElement baiduTextBox = driver.findElement(By.id("kw")); baiduTextBox.sendKeys("找到文本框"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } baiduTextBox.clear(); |
5.6.4 Submit()
Submit()方法用于對(duì)指定元素所在的form元素進(jìn)行提交操作。
例如,百度貼吧的登錄界面如圖5-43所示。

圖5-43 百度貼吧登錄界面
用Firebug查看它的HTML,如圖5-44所示。

圖5-44 百度貼吧登錄HTML代碼
可以看到,它由一個(gè)form組成,只要對(duì)這個(gè)from中的任何元素使用Submit()方法,都會(huì)提交這個(gè)form。
本文選自《Selenium自動(dòng)化測(cè)試指南》第五章節(jié),本站經(jīng)人民郵電出版社和作者的授權(quán),近期將進(jìn)行部分章節(jié)的連載,敬請(qǐng)期待!
版權(quán)聲明:51Testing軟件測(cè)試網(wǎng)獲人民郵電出版社和作者授權(quán)連載本書(shū)部分章節(jié)。
任何個(gè)人或單位未獲得明確的書(shū)面許可,不得對(duì)本文內(nèi)容復(fù)制、轉(zhuǎn)載或進(jìn)行鏡像,否則將追究法律責(zé)任。
相關(guān)文章:
查找條件對(duì)象By—Selenium自動(dòng)化測(cè)試指南(3)