上篇文章講了文本框(TextBox),這篇講按鈕(button),因為它倆的html代碼比較像:
你看,除了type不一樣,別的都差不多。按鈕的type可以是button,也可以是submit。我們一會兒說它倆的區(qū)別,先說按鈕的操作。自動化測試中對按鈕最常用的的操作如下:
1. 是否在當(dāng)前頁面顯示;
2. 是否啟用/禁用;
3. 點擊。
前兩個一個是isDisplayed, 第二個是isEnabled,都說過了不說了。主要介紹第三個。第三個是點擊,方法名是click()。其實之前我們講driver時已經(jīng)用過click()這個方法了,看起來肯定不陌生,當(dāng)時點擊的是鏈接,這次點按鈕。簡單演示一下,新建一個叫SeleniumButton的java項目 -> 包com.test -> Test.java,添加selenium jar包,把driver聲明配置好,把示例網(wǎng)頁http://cslm-test.com/webapps/elements/webelements.html 全屏打開,然后點擊按鈕:
我們點擊的是那個name=”confirm”的按鈕,然后彈出一個對話框:
這就是點擊。不過需要注意的是,一般來說點擊都會讓網(wǎng)頁跳轉(zhuǎn),而跳轉(zhuǎn)就需要一段時間等待,所以點擊經(jīng)常會造成不同步的情況而報錯(比如網(wǎng)頁還在跳轉(zhuǎn)過程中但程序已經(jīng)開始定位下一個頁面的控件了)。最好在跳轉(zhuǎn)時間長的點擊步驟后加上Thread.sleep()來解決這個問題。
剛才的確定按鈕它的type=submit,其實如果是type=button也是一樣的。那它倆的區(qū)別到底是什么呢?這里再看一個例子。打開瀏覽器訪問咱們另一個示例網(wǎng)頁http://cslm-test.com/webapps/login/formlogin.html ,里面有兩個按鈕,一個類型是button,另一個是submit:
這個頁面都熟悉吧?標準的登錄界面。只不過我們這里有兩個登錄按鈕。你按按試試看誰管用。我們發(fā)現(xiàn)只有類型是submit的按鈕會讓網(wǎng)頁跳轉(zhuǎn)到formloginsuccess.html頁面,也就是登陸成功的頁面。
我們還發(fā)現(xiàn),這段極其短小的源代碼還包括了一個叫form的標簽,form就是表單。我們看到表單里有個屬性叫action=”formloginsuccess.html”,這句代表跳轉(zhuǎn)到哪個頁面。當(dāng)type=submit的按鈕被點擊后,表單內(nèi)所有的元素都會被提交/發(fā)送到服務(wù)器,再由服務(wù)器轉(zhuǎn)發(fā)到新的頁面。Submit的英文涵義就是提交。當(dāng)然,這個網(wǎng)頁比較簡單,但是麻雀雖小五臟俱全,點擊時表單里的四個主要元素– 用戶名文本框,密碼文本框,以及兩個按鈕都會被提交到formloginsuccess.html這個頁面:
拿到這些值后,formlogin.html再響應(yīng)進行處理。因為咱們這套教程的重點不是web程序開發(fā),所以不深究網(wǎng)頁跳轉(zhuǎn)的原理,所以大家也別糾結(jié)提交之后的數(shù)據(jù)處理過程。大家只要記住,當(dāng)點擊類型為”submit”的按鈕時,網(wǎng)頁會跳轉(zhuǎn)并把表單里的所有元素提交到服務(wù)器,服務(wù)器再轉(zhuǎn)發(fā)到指定的頁面即可。一個表單里可以有各種類型的控件,可以包含文本框按鈕鏈接下拉列表單復(fù)選等等等等。
相反,type=button的按鈕則并不會讓網(wǎng)頁跳轉(zhuǎn),也不會把表單內(nèi)元素提交。
現(xiàn)在咱們把這個提交過程寫成自動化程序,新建一個叫SeleniumForm的java項目 -> 包com.test -> Test.java,添加selenium jar包,把driver聲明配置好,把formlogin.html網(wǎng)頁全屏打開:
假如我們的test case是:
1. 輸入用戶名:marco;
2. 輸入密碼:123;
3. 點擊登錄按鈕。
有了之前幾篇的鋪墊,寫起來不難,代碼如下:
以上就是按鈕的使用、按鈕在表單里的作用以及兩種按鈕的區(qū)別。其實表單還有個福利,注意點擊按鈕步驟driver.findElement(By.id(“type_submit”)).click(),我們可以把這句話替換成另外一句:pwdTextBox.submit():
我們運行程序,發(fā)現(xiàn)頁面竟然也跳轉(zhuǎn)了!而且我還可以告訴大家表單內(nèi)的元素也都被提交了??晌覀冋麄€過程并沒有點擊按鈕!而是僅僅用密碼文本框?qū)ο笳{(diào)用了submit()方法。為什么這樣也可以呢?其實,submit()是專門為表單設(shè)計的方法,它規(guī)定只要是表單內(nèi)的元素都可以使用該方法對該表單內(nèi)所有元素進行提交。注意,是任意一個,就可以把整個表單的所有內(nèi)容提交。大家可以用用戶名文本框?qū)ο髐sernameTextBox試試,這里就不做演示了。
以上就是按鈕和表單的基本操作,這篇文章的源代碼是SeleniumButton和SeleniumForm。下一篇介紹單選按鈕和復(fù)選框。
本篇知識點及注意事項:
1. 類型是submit的按鈕會讓網(wǎng)頁跳轉(zhuǎn),類型是button的不會。
2. 表單提交時會把所有元素的值提交到服務(wù)器。