我有一个包含 2 个文本字段和一个提交按钮的登录页面。只有在正确填写文本字段时才会启用提交按钮。
<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>
我正在使用 Capybara 和 SitePrism 来识别SignInPage
该类的 Web 元素:
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)
网络驱动程序:
chromedriver v2.29
geckodriver v0.14.0