如何使用CasperJS与自定义选择框进行交互?

时间:2014-10-14 07:03:28

标签: javascript phantomjs casperjs

当我使用Casper脚本访问nike.com商店页面(下面列出的测试URL)时,我无法更改'skuAndSize'选择元素的值。我通过检查假设更改后的屏幕截图来验证这一点。我用来做的代码是:

// Add to cart
casper.then(function() {
  this.fillSelectors('form.add-to-cart-form', {
    'select[name="skuAndSize"]' : '3857923:9'
  }, false);
  this.capture("test.png");
  this.click('button#buyingtools-add-to-cart-button');
});

有没有更好的方法来处理它?<​​/ p>

测试网址:http://store.nike.com/us/en_us/pd/mercurial-superfly-fg-soccer-cleat/pid-1531739/pgid-1481200

1 个答案:

答案 0 :(得分:1)

我查看了您的链接,隐藏了选择框。它被替换为标记,它更改了引擎盖下的选择框,但选择框和自定义标记之间的连接是一种方式。使用JS更改选择框时,不会更改自定义标记。

如果您只想测试添加到购物车的功能,您可以像保存它一样保留它,因为在提交时会使用基础选择框数据。

如果要重新创建用户交互,则必须明确单击此(未经测试):

casper.thenClick(".exp-pdp-size-and-quantity-container > .exp-pdp-size-container")
      .wait(100) // little time to open dropdown
      .thenClick(x("//div[contains(@class,'exp-pdp-size-dropdown-container')]/ul/li[not(contains(@class,'exp-pdp-size-not-in-stock'))][3]"));

这应该使用CasperJS XPath实用程序选择第三个可用大小。