我有一個登錄頁面,其中包含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
不幸的是,更新這兩個驅動程序(特別是'geckodriver'沒有解決這個問題。我也清理了'水豚'寶石,並刪除了舊版本。這對問題沒有影響。 – jimjamz
@jimjamz這聽起來像你可能有一些JS附加到用戶名字段做驗證或什麼(?),由於事件時間的差異,防止焦點轉移到FF中的密碼字段。 –