使用watir-webdriver,我正在尝试设置文本字段的值。
browser.text_field(:id, "phoneNumbers_value_input").set("5555551234")
当我运行该命令时,我可以看到watir找到了该字段,因为光标在该字段上设置但是没有输入文本。我也尝试了send_keys和append命令,但似乎没有任何工作。这些方法没有例外。
我在这个字段和页面上的其他字段之间找到的唯一区别(一切正常)是它上面有这个JQuery掩码。
$(selector).mask("(999) 999-9999");
有关如何设置文本字段的任何想法?
修改
更多Javascript:
selector = '#' + id(field.id) + '_input';
if (field.format == 'phone') {
$(selector).mask("(999) 999-9999");
}
该字段的HTML:
<div id="phoneNumbers_value_form_item" class="form_item validated no_focus">
<label for="phoneNumbers_value" class="form_label">phone</label>
<input type="text" value="" name="phoneNumbers[][value]" id="phoneNumbers_value_input" class="text">
<div class="tip"> </div>
<div class="tip_validating">
</div>
<div class="tip_error">
</div>
</div>
答案 0 :(得分:1)
我没有看到您提供的HTML中的任何元素与您在发布顶部的ruby代码中处理的文本输入字段相匹配。例如那里没有任何ID为'phone'的
根据您问题中的HTML,我希望以下内容可以正常使用
browser.text_field(:id, "phoneNumbers_value_input").set("5555551234")
查看您在评论中链接的示例页面,当我在输入字段上使用谷歌浏览器和“检查元素”功能,ID为“电话”时,我看到有许多事件监听器与字段(模糊,焦点,输入,keydown,按键,取消屏蔽)
'焦点'特别引起了我的注意,并且在那个场上看到它会让我觉得你可能需要首先针对相同的元素发射事件,例如onfocus事件,以激活字段,然后尝试设置值。
您会注意到,当您手动操作时,该字段开始为空白,但是一旦获得焦点,它就会向用户显示输入掩码的格式,这可能需要先发生,在它看到任何形式的输入之前。
编辑:在这种情况下,根据提问者的反馈,答案结果是他们需要首先针对文本字段触发'unmask'事件,然后设置他们想要的值,以便在自动化测试时正常工作的事情。这不会运用字段屏蔽功能,但我再次怀疑这个实例中的测试任务是广泛测试第三方(JQuery)插件,他们更关心后端的业务逻辑等,因此简单能够在没有遮蔽代码的情况下设置值是需要的。
答案 1 :(得分:1)
问题与关注文本字段有关。即使使用.click(),如果输入字段(参见issue 2377),webdriver最终会以光标结束。按HOME键可将光标移动到开头,并允许您输入输入字段,并且仍具有遮罩功能。
在Java中:
WebElement txtPhone = getDriver().findElement(By.id("phoneNumbers_value_input"));
txtPhone.sendKeys(org.openqa.selenium.Keys.HOME);
txtPhone.sendKeys(phoneNumber);