【问题标题】:How to pass argument to success callback in casperjs waitForSelector function?如何在 casperjs waitForSelector 函数中将参数传递给成功回调?
【发布时间】:2014-11-27 01:17:35
【问题描述】:

我在 CasperJS 中使用 waitForSelector 函数,并希望将变量 (indexNumber) 传递给成功回调。这似乎不起作用。这可能吗?

casper.waitForSelector(x('//button[@class="addToShopcart"]'),
    function success(indexNumber) {
        casper.echo(stripLineBreaksTrim(casper.fetchText(x('//select[@id="artikel"]//option['
+ indexNumber + ']'))));
    },
    function fail() {});

我想迭代选项列表的索引并从中提取数据。上面的 sn -p 封装在一个函数中。该函数是从 casper 测试中调用的。

一旦选择框的选项被选中,按钮就会通过 ajax 加载(这发生在函数的另一部分)。然后(见上文)我想获取特定选项的值(由 indexNumber 定义)。

【问题讨论】:

  • indexNumber 应该是适合页面上此选择器的按钮的索引?你想达到什么目标?
  • 我想迭代选项列表的索引并从中提取数据。上面的 sn-p 封装在一个函数中。该函数是从 casper 测试中调用的。
  • 好的,但是一旦找到 first 按钮,waitForSelector 就会触发 success 回调。按钮与选项文本/值有什么关系?
  • 一旦选择框的选项被选中,按钮就会通过 ajax 加载(这发生在函数的另一部分)。然后(见上文)我想获取特定选项的值(由 indexNumber 定义)

标签: javascript casperjs


【解决方案1】:

waitForSelectorsuccess 回调是步进函数回调(then)。传入此回调的是最后加载的页面资源,您无法通过使用不同的变量名称(如 indexNumber)来更改此行为。

根据 cmets,您想要获取所选选项的文本,这实际上是最后更改的选项。所以以下应该工作:

casper.echo(stripLineBreaksTrim(casper.evaluate(function(){
    return document.querySelector('#artikel').selectedOptions[0].innerHTML;
})));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2011-09-02
    • 2015-08-01
    相关资源
    最近更新 更多