我在页面上有以下代码:
<div class="col-md-5 col-lg-3">
<div class="react-selectize bootstrap3 root-node simple-select open">
<div class="react-selectize-control">
<div class="react-selectize-placeholder">testing!</div>
<div class="react-selectize-search-field-and-selected-values">
<input class="resizable-input" style="width: 4px;" type="input">
如果我在物理上选择输入字段,然后使用watir-classic运行以下内容:
BROWSER.div(:class => 'col-md-5 col-lg-3')
.div(:class => 'react-selectize-search-field-and-selected-values')
.text_field(:class => 'resizable-input')
.send_keys('Magg')
它会在字段中输入Magg
,但如果我不手动选择字段,我似乎无法输入文字。
我尝试过以下方法:
BROWSER.div(:class => 'col-md-5 col-lg-3')
.div(:class => 'react-selectize-search-field-and-selected-values')
.text_field(:class => 'resizable-input')
与
.set('Magg')
.fire_event('onfocus')
.fire_event('mousedown')
.fire_event('mouseup')
使用
.parent.text_field(:class => 'resizable-input')
.parent.input(:class => 'resizable-input').set('Magg')
.input(:class => 'resizable-input').set('Magg')
.input(:class => 'resizable-input').send_keys('Magg')
我一直在使用控件与开发人员合作,我们都不知道如何给予控件焦点,以便send_keys
无需手动选择控件即可工作。任何指导都将不胜感激。
答案 0 :(得分:1)
首先 - 强制性警告Watir Classic已被弃用,您应该使用Watir WebDriver。 (这可能会解决这个问题)
第二 - 技术上:div(:class => 'col-md-5 col-lg-3')
应为div(:css => '.col-md-5.col-lg-3')
,因为上课应该是单数。
您是否曾尝试在element.fire_event(:click)
之前执行element.set
?
答案 1 :(得分:1)
请注意,HTML的输入标记的“type”值无效。每W3.org,“输入”的类型不是输入标记的有效类型选择。
这可能是导致您期望工作的方法(例如.set
)失败的原因。这也意味着返回更具体的输入子类型(例如.text_field
)的所有watir方法都无法选择该标记。
Watir根据输入标记的特定子类型定义特定的输入相关方法(例如.set,.unset),并具有选择这些特定输入类型(例如.button
)的方法。通常你会使用它的子类型的方法选择一个输入标签,但由于该值无效,在这种情况下这不是一个选项,你被迫使用.input
。但正如我们刚刚讨论的那样,watir中的输入对象没有像.set这样的方法。因此,您唯一的后备是使用.sendkeys向元素发送击键。
如果是我,我会在该HTML上写一个错误,根据W3规范它没有使用'type'的正确值。
修复HTML有效可能会使Watir或任何其他自动化工具更好地工作,特别是那些基于webdriver的工具。