无法自动将表格机械化为红宝石

时间:2018-12-02 18:01:47

标签: ruby-on-rails ruby forms mechanize

我正在尝试对宝石进行机械化测试。我想使用表格订阅网站。我正确地选择了所有元素(我想),但是“提交”按钮没有提交表单。提交表单后,会立即收到一封邮件。我是该宝石的新手,并且正在测试使用一个必填字段来注册到网站。我正在使用webservice来检查垃圾邮件是否正常工作,因此每个邮件字段都可以用@ moncourrier.fr.nf之前的内容替换,然后再检查是否在yopmail网站上收到了邮件,但是我什么也没收到。你知道为什么不起作用吗?

require 'rubygems'
require 'mechanize'
require'pry'


agent = Mechanize.new
agent.get('http://blackburnecreek.com/newsletter-registration') do |page|
form=agent.page.forms[1]
button=form.button_with(:value => "Subscribe")
agent.page.forms[1]["EMAIL"]= "testmechanizegem@moncourrier.fr.nf"

agent.submit(form, button)


end

1 个答案:

答案 0 :(得分:1)

您的表单未提交,因为实际的表单使用jquery来提交带有一些额外参数的表单。他们解除了表单的Submit事件的绑定,并且正在执行ajax请求以提交表单,而不是使用额外的参数id

您可以通过在浏览器的“网络”标签中查看正在发起的请求来确认,该请求包含以下参数:

enter image description here 该页面还运行以下javascript,它将额外的id参数添加到请求中:

function mce_init_form(){
    jQuery(document).ready( function(jQuery) {
      var options = { errorClass: 'mce_inline_error', errorElement: 'div', onkeyup: function(){}, onfocusout:function(){}, onblur:function(){}  };
      var mce_validator = jQuery("#mc-embedded-subscribe-form").validate(options);
jQuery("#mc-embedded-subscribe-form").unbind('submit');//remove the validator so we can get into beforeSubmit on the ajaxform, which then calls the validator
      options = { url: 'http://blackburnecreek.us8.list-manage.com/subscribe/post-json?u=68692d660a16c9b7e4be6f51e&id=f19ba31349&c=?', type: 'GET', dataType: 'json', contentType: "application/json; charset=utf-8",

请参阅以上功能中的url:部分。因此,当您通过机械化提交时,您执行的是无效请求(无参数ID)。

我想机械化不支持JavaScript的执行。我建议您使用capybara,它使用诸如poltergiest之类的网络驱动程序来促进对js执行的支持。