【问题标题】:Executing JQuery or JS code in evaluate function of Casperjs does not function properly with suggestion fields在 Casperjs 的评估函数中执行 JQuery 或 JS 代码在建议字段中无法正常运行
【发布时间】:2014-03-28 10:54:27
【问题描述】:

我几天前就遇到了这个问题,但找不到解决方案。希望你能帮助我。

我有以下登录表单:将括号想象为输入字段!

[选择组]

[输入用户]

[输入密码]

选择组是一个建议字段。如果您输入一个字符,它会在数据库中搜索包含该字符的组,并像下拉列表一样显示 ist。

我想要做的是在用 casperjs 输入一个字符后点击一个建议。

我在浏览器控制台中尝试了以下代码,对我来说效果很好:

  //type r into the select group
  document.querySelector('.ember-view.ember-text-field.form-control').value = 'r';


  //focus to input userfield to view suggestions in selectGroup field (normally it is shown without doing a focus but if you do it programmatically you need to focus to view the suggestions)   
  document.querySelector('#inputUser').focus()

  // the selector div.tt-dataset-0 p selcts the first suggestion
 setTimeout(function(){
    document.querySelector('div.tt-dataset-0 p').click()
  }, 200);

如前所述,在浏览器中执行此代码时会成功执行此结果,但如果我在 casperjs 的评估函数中使用它,则它不起作用。它只会将 r 写入建议框中,而不单击建议(我用屏幕截图检查过)。

我首先尝试用 casperjs 函数解决这个问题:

this.fillSelectors('form#loginForm', {
  '.ember-view.ember-text-field.form-control': 'r'
}, false);

this.mouse.click('div.tt-dataset-0 p');

但是这个功能不起作用。并且键入想要的组名也不适用于登录,因为登录需要一些与建议绑定的信息。

我尝试使用 DALEKJS(使用 phantomjs)(首先输入 r,然后单击带有 jquery 代码的建议)进行相同的尝试,并且效果很好。

希望这对你来说已经足够了。

干杯 izocan

【问题讨论】:

  • 您是否尝试过使用waitUntilVisible 直到建议出现在屏幕上? casperjs.readthedocs.org/en/latest/modules/…
  • 确保您等待结果出现,同时在评估函数中使用 jquery 与页面交互时,您是否尝试 $('#id').click(); ?
  • 大家好,感谢您的建议,据我判断,在 phantomjs 中的 DOM 中从未出现过建议元素。我收到以下错误:FAIL "div.tt-dataset-0 p" 从未出现在 5000 毫秒 # 类型:uncaughtError # 文件:caspertest.js # 错误:"div.tt-dataset-0 p" 从未出现在 5000 毫秒 # 堆栈:未提供 FAIL 在 8.767 秒内执行 15 次测试,14 次通过,1 次失败,0 次可疑,0 次跳过。 1 次失败测试的详细信息: In caspertest.js Test KIXOperator Loginpage uncaughtError: "div.tt-dataset-0 p" never appear in 5000ms

标签: javascript jquery phantomjs casperjs gui-testing


【解决方案1】:

可能是这样的:

this.sendKeys('.ember-view.ember-text-field.form-control', 'r', {keepFocus: true}); 

casper.waitUntilVisible("your auto-complete div",function(){
    this.click('div.tt-dataset-0 p');
});

如果您仍然收到超时错误,请尝试::

this.sendKeys('.ember-view.ember-text-field.form-control', 'r', {keepFocus: true}); 

casper.wait(1000,function(){
    var fs = require('fs');
    fs.write('results.html', this.getPageContent(), 'w');
    this.capture('checkDropDownList.jpg', undefined, {
        format: 'jpg',
        quality: 75
    });
});

并检查 results.html 中的 html 或下拉列表是否出现在屏幕中。

【讨论】:

  • 嘿,谢谢您的建议,您的 您的自动完成 div 到底是什么意思,我使用了以下代码:casper.waitUntilVisible(".tt-suggestion ",function(){ this.click('div.tt-dataset-0 p'); }); tt-suggestion 是显示建议的 div。并且该元素仍然没有出现在 DOM 中。我也用 div.tt-dataset-0 p 尝试了同样的事情并得到同样的错误。
  • 好吧,我的错,还以为是 AJAX 自动完成。是的,我说的是您的下拉列表,即显示结果的 div。你又收到超时错误了吗?
  • 是的。它总是说某事。像这样:在 caspertest.js 测试 KIXOperator Loginpage uncaughtError: ".tt-suggestion" never getting in 5000ms
  • 嘿。你是对的,下拉菜单从来没有像我一样出现这正是问题所在。但如果我检查屏幕截图。该组的字段为空(没有“r”)。如果我检查 result.hmtl,我的建议字段的下拉字段是 hidden
  • 没有'r'?那么你的选择器是错误的或者不是单一的,完成它。如果需要,请向我们展示 HTML 代码。如果您可以发送 'r' 并使用 waitUntilVisible() 应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多