2016-08-11 43 views
0

我有一個擴大表/行的問題。我做了一些Google搜索,並沒有找到任何有關這種情況的信息。水豚/ Poltergeist,擴大手風琴表擴大間歇性失敗

基本上我有一個5列左右的表格。點擊後將展開表格並顯示更多信息。在這個新信息裏面有一個按鈕,試圖點擊。

這是該行的表iself的HTML:

<thead> 
<tbody> 
    <tr class="odd" data-row="0" data-source="/user/01" role="row"> 
    <td class="sort_1">John Doe</td> 
    <td>Person</td> 
    <td>Yes</td> 
    <td>Yes</td> 
    <td> Building 2 </td> 
    </tr> 
<more table rows here repeated> 
</tbody> 
</table> 

表HTML本身有一個ID和一切,但我需要該行本身內點擊列中的任何一個獲得它擴大。

我試過這個:page.find('td', :text => 'John Doe').click雖然它確實工作成功,但在截圖後它似乎沒有顯示任何擴展...所以我不知道擴展表將在這種情況下工作。但是,在重新運行它後,它工作......但它不一致。

波紋妖精展示的擴展表格幾乎沒有顯示的截圖(就像是一條擴展)。所以也許它沒有等待足夠的時間出現?我不確定。

當表擴展時,它基本上會產生一個新的<tr user-data-row="5">,它會在展開時出現在上面的行的下面。

僅供參考這裏是按鈕的HTML,我膨脹後點擊:

<div class="col-xs-12 col-sm-5 col-md-5" style=""> 
<ul class="list-unstyled"> 
<ul class="list-inline"> 
    <li> 
    <a class="btn btn-sm btn-default" href="/stuff/site" data-method="post" rel="no-follow" data-confirm="Generic: Confirmation Dialogue">The Button</a> 
    </li> 
    <li> </li> 
</ul> 
</div> 

我開始還以爲這是在確認對話框彈出絆倒了,但鬼驅人應該避免那些默認。它似乎這樣做......所以我不知道什麼可能是問題。由於它不一致,我認爲這可能是一個時間問題。我Capybara.default_max_wait_time = 15因爲DB是一個虛擬機,但它並沒有成爲一個問題,到目前爲止....

編輯: 失敗的代碼似乎是在此之後: page.find(「TD」, :text =>'John Doe')點擊 click_link('The Button')

它似乎在大約50%的時間內工作。

+0

奇怪的是,它似乎總是第一次失敗,然後第二次工作。我不確定這是爲什麼,因爲這些時間之間沒有任何變化。 – msmith1114

+1

什麼是失敗 - 顯示您的測試代碼 - 什麼是水豚應該等待?顯示的行如何?它被動畫成可見性(slide_down等)?它是否被庫中的動畫所關閉,您可以在測試模式下關閉動畫? –

+0

我在一段代碼中添加了它,它失敗了(這沒什麼奇怪的,直接點擊文本本身來打開手風琴表,然後點擊一個按鈕)。新行被動態化爲一種「揭示」,即:單擊原始行上的任何位置都會導致新行在下面進行動畫/打開(新行需要大約一秒才能完全顯示)。據我所知,沒有庫允許我關閉測試模式。 – msmith1114

回答

2

當在動畫中使用某些水豚驅動程序時,點擊可能會錯過目標。發生這種情況的原因是計算鼠標單擊的位置,創建鼠標事件並將其提交到「瀏覽器」隊列進行處理。在處理事件之前,目標元素可能會移動到足以使點擊錯過元素。有幾種方法來處理這個

  1. 各地最好的解決方案(速度,可靠性,鼠標事件的有效性)是在測試環境中禁用動畫。這通常可以通過根據正在使用的庫有條件地設置一些JS變量來完成。

  2. 睡眠一段時間後才嘗試點擊以便動畫有時間完成 - 雖然速度較慢,但​​仍能保持像用戶一樣通過頁面事件處理的「真實」鼠標點擊。

  3. 使用#trigger來模擬點擊-- 這將是快速的,但可以做很多事情的短路,以確保測試有效地複製用戶可以做的事情,並因此可以導致錯過失敗的測試。它應該作爲最後手段使用的方法