我正在尝试与外部网站进行互动:http://is.gd/LtgYEk 我需要能够用id =“textOrigen”填写输入,这里是html
<p>
<label class="form-label">Departing from:</label>
<span class="label-field">
<input type="text" autocomplete="off" onblur="onblur2('textOrigen');" onfocus="initID('textOrigen');" size="17" id="textOrigen" name="text" maxlength="40" style="position:static;color: #505050;">
<select style="display:none" onchange="clearValidate(); Origen();" class="validate[dynamic]" id="cmbOrigen" name="cmbOrigen">
<option value="-1" selected="selected">Origin</option>
</select>
<label class="label-error" id="lblerrorOrigen"></label>
</span>
</p>
我使用'capybara / poltergeist'
组合了一个简单的ruby脚本我无法复制浏览器行为,即: 单击时,输入字段的默认值将突出显示,因此在您开始输入时将被删除。
我忘记了我试过的所有不同的变化,但尝试了很多。我找到了另一个SO post,它似乎有点用,但没有帮助
这是填写此字段的方法的最后一次修订:
def session.fill_autocomplete(field, options = {})
execute_script %Q{ $('##{field}').trigger('focus') }
fill_in field, with: options[:with]
execute_script %Q{ $('##{field}').trigger('focus') }
execute_script %Q{ $('##{field}').trigger('keydown') }
selector = %Q{#output div:contains('#{options[:with]}')}
execute_script "$(\"#{selector}\").mouseenter().click()"
end
我编写的脚本非常简单,唯一的其他相关位是会话实例化时:
session = Capybara::Session.new(:poltergeist)
非常感谢任何帮助。
答案 0 :(得分:1)
我注意到使用正确版本的phantomjs 是最基本的。
虽然2.x已经出局,但我注意到 phantomjs 1.8.2 的表现远远超出预期,而且越来越少。
我目前正在RailsAdmin中测试自动填充字段,但成功,没有使用任何延迟技术。
def fill_in_autocomplete(selector, text)
find(selector).native.send_keys(*text.chars)
end
def choose_autocomplete_entry(text)
find('ul.ui-autocomplete').should have_content(text)
page.execute_script("$('.ui-menu-item:contains(\"#{text}\")').find('a').trigger('mouseenter').click()")
end
fill_in_autocomplete 的示例选择器为:
".author_field .ui-autocomplete-input"
答案 1 :(得分:0)
我在很多方面测试后找到了解决方案。 关键是增加一些延迟,以允许填充自动建议div。
以下是有效的方法:
def session.fill_city(field, options = {})
sleep 3
script = %Q{ $("#{field}").focus().keypress().val("#{options[:with]}") }
execute_script(script)
sleep 2
find('#output').find('div').trigger('click')
end