我有一个simple_form:
apiRoutes.get('/SchoolListing_lssplalpha_Replace', function (req, res) {
schoolListModel.find({},function (err, check) {
if (err) {
return console.log(err);
}
else {
for (let checkObj of check) {
let newPicArr=[];
for (let pic of checkObj.pics) {
pic = pic.replace("lssplalpha", "lsslprod");
newPicArr.push(pic);
}
checkObj.pics=newPicArr;
checkObj.save(function (err) {
if (err) {
console.error('ERROR!');
}
});
}
return res.json({ status: true, message: "Updated Schools" });
}
});
});
[[底部还有其他东西可以提交]
我正在尝试用水豚/黄瓜对其进行测试。
我可以使用以下方法将内容提交到:old_domain中:
= simple_form_for @client_email, url: { action: "update" }, html: {class: "search_form", method: :put } do |f|
= f.error_notification
.input-row
= f.input :old_domain, :label => "Old domain name", required: true , input_html: {name: 'search_term'}
= f.input :new_domain, :label => "New domain name", required: true
但是,我不知道该如何使用“ new_domain” ...我试图在@session.fill_in('search_term', with: search_term)
行中添加id:,但这没有帮助...
HTML中的f.input
行是:
:new_domain
ETA: 我相信它应该在寻找名称字段,所以“ client_email [new_domain]”,但出现水豚错误:
<div class="input string required client_email_new_domain">
<label class="string required control-label" for="client_email_new_domain">
<abbr title="required">*</abbr> New domain name</label>
<input class="string required" id="client_email_new_domain"
name="client_email[new_domain]" type="text" /></div>
答案 0 :(得分:1)
fill_in
采用输入ID,名称,占位符或相关的标签文本,因此,考虑到HTML提供的以下任何一项,都应填写新的域输入
fill_in 'client_email_new_domain', with: 'whatever'
fill_in 'client_email[new_domain]', with: 'whatever'
fill_in 'New domain name', with: 'whatever'
如果其中任何一个不起作用,则实际上您不在带有您认为存在的可见HTML的页面上。在这种情况下,使用@session.save_and_open_screenshot
来查看页面的实际外观,并尝试使用@session.html
来查看页面的HTML实际内容(假设@session是实际上是您要在其中进行测试的Capybara会话-否则请对当前会话使用page
。
要注意的一件事是,如果要将任何JS小部件行为附加到输入中,以隐藏原始输入。如果需要,那么您需要与窗口小部件添加到页面的可见元素进行交互,而不是与隐藏的原始输入元素进行交互。
最后一种可能性是@session
实际上不是您访问过该页面的会话。不确定是否要在实例变量中传递当前会话,除非您要测试多个会话?