2013-06-20 42 views
0

我有一個帶有複雜數據輸入表單的Web應用程序,其中有一些標籤可保存各種配置項的輸入字段。我正在編寫一個測試,在不同選項卡上的字段中輸入數據,然後執行保存。當我輸入每個項目時,我會在進入下一步之前驗證數據輸入控件是否具有我選擇的文本或值。我發現有時(但並非總是),當我移動到另一個選項卡時,以前選項卡上的字段會丟失我輸入的數據。Selenium:有多個標籤的表單中輸入的數據有時會消失

我該如何預防?

我在Web中使用Selenium 2和WebDriver,並使用Firefox運行測試。

我有兩個字段麻煩:

一個是一個簡單的文本輸入字段 二是與自動完成功能

一個文本輸入框兩場是在最後的I輸入數據之前切換標籤。在切換選項卡之前,我沒有其他輸入數據的字段會丟失數據。就在我進入新選項卡之前,我正在與之交互。

我已經試過檢查JQuery是加載在發送文本到輸入字段的方法的結尾,但它似乎沒有幫助。檢查JQuery的方法返回true,並且數據有時仍被擦除。

手動輸入數據時不會發生這種情況,也不會在另一個只在一個選項卡上輸入數據的自動化測試中發生。

下面是自動完成場HTML時已經輸入的文本,並且存在已觸發自動完成沒有掛起的輸入:

<div id="s2id_autogen5" class="select2-container select2-container-multi select2"> 
    <ul class="select2-choices" style=""> 
     <li class="select2-search-choice"> 
      <div> 
       htm 
      </div> 
      <a class="select2-search-choice-close" tabindex="-1" onclick="return false;" href="#"></a> 
     </li> 
     <li class="select2-search-field"> 
      <input class="select2-input" type="text" autocomplete="off" tabindex="0" style="width: 10px;"></input> 
     </li> 
    </ul> 
</div> 

下面是簡單的文本輸入字段的HTML源代碼:

<td class="optionValue option_sr_test_object_url"> 
    <input id="option_d03e6450-5990-4a31-8e84-5b1af89d2c47_sr_test_object_url" type="text" placeholder="e.g. /path/testobject.html" value="/path/test.html"> 
    </input> 
</td> 
+0

這有點奇怪。你的(表單)代碼可能有問題。如果是這樣,那麼測試將實現其目的;) –

+0

手動輸入數據時絕不會發生這種情況。甚至在使用Selenium輸入數據時,如果我在測試過程中不切換製表符。 – Selena

+0

我明白了。有時我有JS錯誤,我只能在調試時檢測到。爲了以防萬一,我會修改表單代碼。另外,另一個想法可能是一些JS名稱重複,可能導致Selenium的腳本與您的表單代碼進行交互。如果可能,請嘗試更改表單中「復位」字段的函數名稱。 –

回答

0

我終於找到的東西,可靠地防止這種情況的發生。

driver.switchTo()窗口(driver.getWindowHandle());

當我在切換選項卡之前執行該行時,我之前輸入的數據未被清除。我不知道這是爲什麼起作用,也不記得我是如何將其作爲解決方案的。我一直堅持用這個答案更新這個問題幾個月,但我一直忘記去做。

0

與此掙扎了幾天之後,我有一個部分解決了我的問題:

對於簡單的文本輸入框,如果我送Keys.TAB要將焦點更改爲下一個輸入字段,那麼當我切換到表單上的另一個選項卡時,數據USOUALLY不會被擦除。必須有一些事件在焦點切換到另一個字段時觸發(但不是另一個選項卡),當僅使用sendKeys輸入文本時,該字段不會觸發。但是,在某些情況下,數據偶爾會消失。

對於具有自動完成功能的輸入,我必須發送Keys.RETURN或Keys.TAB才能成功地將文本輸入到字段中。使用此字段,您可以從自動完成列表中選擇一個選項,或者只需按Enter鍵或Tab鍵即可輸入與其中一個自動補償選項不匹配的文本。使用Keys.RETURN或Keys.TAB輸入文本後,我需要通過發送Keys.TAB將焦點更改爲另一個字段。再次,我認爲這是一些事件,需要觸發才能保留數據,並且該事件只有在焦點更改爲另一個輸入字段後纔會觸發,但如果切換選項卡,則不會發生此事件。

檢查JQuery是否沒有活動請求並沒有幫助,因爲在某些情況下,即使沒有活動查詢,數據仍會偶爾從一個或兩個字段中消失。

我需要一個真正的萬無一失的方法,消除所有情況下的這個問題。我寧願不必硬編碼睡眠。也許有更好的方法來以非編碼的方式設置好等待?我很想有一個完整的解決方案來解決我的問題,因爲鑑於這個解決方案不是萬無一失的,我不能接受這個問題的答案。

相關問題