我正在尝试对宝石进行机械化测试。我想使用表格订阅网站。我正确地选择了所有元素(我想),但是“提交”按钮没有提交表单。提交表单后,会立即收到一封邮件。我是该宝石的新手,并且正在测试使用一个必填字段来注册到网站。我正在使用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
答案 0 :(得分:1)
您的表单未提交,因为实际的表单使用jquery来提交带有一些额外参数的表单。他们解除了表单的Submit事件的绑定,并且正在执行ajax请求以提交表单,而不是使用额外的参数id
。
您可以通过在浏览器的“网络”标签中查看正在发起的请求来确认,该请求包含以下参数:
该页面还运行以下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执行的支持。