2017-08-03 76 views
0

我有一個登錄頁面,其中包含2個文本字段和一個提交按鈕。提交按鈕僅在正確填寫文本字段時啓用。Firefox和Chrome Selenium webdrivers與水豚和SitePrism的行爲不同

<fieldset> 
    <div class="control"> 
     <input type="email" name="username" class="" value="Email"> 
     <span class="input-icon"></span> 
    </div> 
    <div class="control"> 
     <input type="text" name="password" class="" value="Password"> 
     <span class="input-icon"></span> 
    </div> 
    <input type="submit" id="signInFormSubmitButton" disabled="" value="Sign In"> 
</fieldset> 

我使用水豚和SitePrism識別SignInPage類的網絡元素:

class SignInPage < SitePrism::Page 
    element :username_field, "input[name='username']" 
    element :password_field, "input[name='password']" 
    element :sign_in_button, "input[id='signInFormSubmitButton']" 

,並與相同類的方法中的交互:

def signInWith(username, password) 
    username_field.set username 
    # password_field.click 
    password_field.set password 
    end 

我的步驟定義然後調用該方法:

When(/^I attempt to sign in with "([^"]*)" and "([^"]*)"$/) do |username, password| 
    @home_page.header.signIn 
    @sign_in_page.signInWith(username, password) 
end 

當使用chromedriver運行我的測試時,所有文本字段都被填充,啓用登錄按鈕,然後通過另一種方法驗證並按下。 隨着geckodriver,我收到以下錯誤:

Element is not Enabled (Selenium::WebDriver::Error::InvalidElementStateError) 

使用sleep s到診斷,原來的密碼文本字段沒有被填充,因爲焦點沒有被簡單地使用設置爲它password_field.set password。唯一的辦法,我可以得到的測試表現爲chromedriver呢,它取消了行,# password_field.click

Selenium webdrivers之間應該有這麼大的區別嗎?畢竟,可以說增加額外的click代表了更多的以人爲本的行爲,另一方面,可以說我必須引入不必要的步驟才能使其發揮作用。

著名的寶石版本:

capybara (2.14.4, 2.6.0) 
cucumber (2.4.0) 
selenium-webdriver (3.4.3) 
site_prism (2.9) 

webdrivers:

chromedriver v2.29 
geckodriver v0.14.0 

回答

0

如果有這麼大的差別 - 號還能有 - 是的。

不同的瀏覽器可以(和確實)表現不同,JS也可以有不同的效果。這就是說,您的chromedrivergeckodriver都已過時。升級至chromedriver 2.31和geckodriver 0.17(在FF 55發佈之前,0.18將無法正常工作),並查看是否可以解決差異問題。

此外,你列出兩個版本的水豚 - 希望你實際上沒有運行與水豚2.6.0測試之一 - 這是大量過時了。

作爲最後一個提示(不涉及您的問題),使用SitePrism時,你可以利用水豚選擇,讓您的元素定義更清潔,需要較少的直接CSS/XPath的

class SignInPage < SitePrism::Page 
    element :username_field, :field, 'username' 
    element :password_field, :field, 'password' 
    element :sign_in_button, :button, 'signInFormSubmitButton' 
+0

不幸的是,更新這兩個驅動程序(特別是'geckodriver'沒有解決這個問題。我也清理了'水豚'寶石,並刪除了舊版本。這對問題沒有影響。 – jimjamz

+0

@jimjamz這聽起來像你可能有一些JS附加到用戶名字段做驗證或什麼(?),由於事件時間的差異,防止焦點轉移到FF中的密碼字段。 –

相關問題