文本框在Web頁面中,通澄『模可以允許用戶輸入一些文本并發(fā)送到服務(wù)器拍柒。通常有兩種表現(xiàn)形式:密碼文本和普通文本令哟,在密碼文本中輸入文本通常是經(jīng)常特殊處理的恼琼,常見的是將用戶輸入的文本用●或** * **顯示,在普通文本中也允許輸入單選或多行的文字屏富。如下圖所示:
HTML源碼如下:
用戶名: <input type="text" name="username" id="userID"> <br /><br />
密 碼: <input type="password" name="password" id="passID"> <br /><br />
注釋: <br />
<textarea id="commentsID" rows="3" cols="50" name="comments"></textarea>
通過Name定位輸入文本
通過使用name屬性來識(shí)別定位文本框晴竞,是開發(fā)經(jīng)常使用的一種方法。示例如下:
driver.FindElement(By.Name("username")).SendKeys("username");
通過Id定位輸入文本
通過使用Web元素的Id來識(shí)別定位文本框狠半,應(yīng)該是測(cè)試過程最簡(jiǎn)單和最快的方法了噩死,示例如下:
driver.FindElement(By.Id("userID")).SendKeys("username");
向密碼文本輸入文本
在Selenium中,密碼文本框的處理其實(shí)與普通文本框是一樣的神年,只是密碼文本框中輸入的字符是經(jīng)過處理以特殊字符展現(xiàn)而已已维。示例代碼如下:
driver.FindElement(By.Id("passID")).SendKeys("password");
清空輸入的文本
對(duì)同一個(gè)文本框而言,在使用SendKeys()方法時(shí)瘤袖,有時(shí)候會(huì)將舊的文本和新輸入的文本合并在一起衣摩,從而導(dǎo)致測(cè)試失敗昂验。因此在需要輸入文本的地方捂敌,我們可以先調(diào)用Clear()方法清空文本,再輸入新的文本值既琴。
driver.FindElement(By.Id("userID")).SendKeys("username");
driver.FindElement(By.Id("userID")).SendKeys(" test");
以上的示例最終輸入的文本值變會(huì)變成** username test**占婉,而正確的方法如下所示:
river.FindElement(By.Id("userID")).Clear();
driver.FindElement(By.Id("userID")).SendKeys("username");
對(duì)于密碼框也建議采取同樣的方法,避免輸入文本被合并而導(dǎo)致測(cè)試失敗甫恩。
在文本框中輸入多行文本
在Selenium中逆济,處理多行文本框中普通文本框一樣,示例如下:
driver.FindElement(By.Id("commentsID")).SendKeys("comments \r\n Test Multiline Text");
其中 \r\n 代表換行磺箕,開始新的一行奖慌。最終效果圖如下:
斷言文本的值
在測(cè)試過程中,我們有時(shí)候需要獲取到用戶輸入的文本信息松靡,來驗(yàn)證是否與預(yù)期保持一致简僧,這時(shí)候我們使用斷言** Assert**來實(shí)現(xiàn),示例代碼如下:
IWebElement textValue = driver.FindElement(By.Id("userID"));
textValue.SendKeys("testTextValue");
Console.WriteLine(textValue.GetAttribute("value"));
Assert.AreEqual<string>("testTextValue", textValue.GetAttribute("value"));
最終的結(jié)果如下圖所示:
給元素設(shè)置焦點(diǎn)
在做自動(dòng)化的過程中雕欺,有時(shí)候需要給元素設(shè)置焦點(diǎn)岛马。而在Selenium中沒有專門設(shè)置焦點(diǎn)的方法棉姐,但變通一下,我們可能通過發(fā)送一個(gè)空的按鈕響應(yīng)來解決該問題啦逆。
driver.FindElement(By.Id("commentsID")).SendKeys("");
當(dāng)然伞矩,也可以采用JavaScript來解決該問題,示例代碼如下:
IWebElement elements = driver.FindElement(By.Id("commentsID"));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].focus();", elements);
改變只讀或禁用狀態(tài)文本框的值
只讀屬性的文本框在瀏覽器中是不可編輯的夏志,而禁用狀態(tài)的文本框通常是以灰色顯示的乃坤。如下圖所示:
HTML源碼如下所示:
<!--只讀狀態(tài)的文本框-->
只讀狀態(tài)文本框:<input type="text" name="readOnlyText" id="readOnlyId" readonly="true" value="只讀狀態(tài)"/>
<br /><br />
<!--禁用狀態(tài)的文本框-->
禁用狀態(tài)文本框:<input type="text" name="disableText" id="disableTextId" disabled="true" value="禁用狀態(tài)" />
如果文本框被設(shè)置只讀屬性,如果繼續(xù)按照以下方法進(jìn)行輸入盲镶,則會(huì)報(bào)錯(cuò)侥袜。
driver.FindElement(By.Id("readOnlyId")).SendKeys("Read Only Test");
報(bào)錯(cuò)信息如下:
注意:這段代碼在IE中會(huì)報(bào)錯(cuò),而在Chrome中卻不會(huì)報(bào)錯(cuò)
在一些地方用常規(guī)方法不能解決時(shí)溉贿,我們可以嘗試采用JavaScript來解決此類問題枫吧,示例代碼如下所示:
((IJavaScriptExecutor)driver).ExecuteScript("document.getElementById('readOnlyId').value='改變只讀文本的值'");
((IJavaScriptExecutor)driver).ExecuteScript("document.getElementById('disableTextId').value='改變禁用文本的值'");
最終實(shí)現(xiàn)的效果如下:
文本框在日常測(cè)試過程也是比較常見的幾種類型之一,結(jié)合以上各種方法宇色,相信能夠在自動(dòng)化測(cè)試中從容應(yīng)對(duì)九杂。