表单提交与casperjs - 新网址不加载

时间:2017-07-04 13:35:44

标签: javascript node.js phantomjs casperjs

目标

这里我试图在上面进行基本的搜索导航 Pubmed website。让我们说我要搜索的术语是Hello。我最终期望的是在点击搜索按钮后登陆结果页面。

问题

提交代码在Chrome浏览器的javascript控制台上完美运行。但它不适用于casperjs。 current-url似乎保持不变。我无法弄清楚问题出在哪里。

我的代码

// USAGE: casperjs test navigation_test.js

var config = {
  url: 'https://www.ncbi.nlm.nih.gov/pubmed/',
};

config.form = {
  "term": "Hello",
};

casper.test.begin('Testing navigation and forms', 2, function suite(test) {
  test.comment('⌚  Loading ' + config.url + '...');


  casper.start(config.url, function() {
    // adjust the view port
    this.viewport(1280, 1024);
  });

  // #1 method-2 (short)
  casper.then(function() {
   this.fill('form#EntrezForm', config.form, true);   
  })

  // #2
  casper.then(function() {
    test.assertUrlMatch(/term/, 'New location is ' + this.getCurrentUrl());
  });

  casper.run(function () {
    test.done();
  });

});

额外代码

上述代码中的#1 method很短。我也尝试过如下更长的版本。但它也没有用。

//  #1 method-1 (long)
casper.then(function() {
  this.evaluate(function() {
      $('term').value = "Hello"
  });

  test.assertEvalEquals(function () {
      return $('term').value;
  }, "Hello", 'The search was filled out properly.');  

  this.click('button[id="search"][type="submit"][class="button_search nowrap"]');
  // OR
  // this.clickLabel('Search', 'button');
  // OR 
  /*this.evaluate(function() {
    $('search').click();
    // OR
    // document.getElementById('search').click();
  });*/

});

1 个答案:

答案 0 :(得分:1)

在我提交表单或请求新的uri后,ALWAYS使用其中一个waitFor作为选择器。我有时会注意到仅使用.then会失败。

这传递正常(我也注意到你的网址匹配略有错误)

var config = {
    url: 'https://www.ncbi.nlm.nih.gov/pubmed/',
};

config.form = {
  "term": "Hello",
};

casper.test.begin('Testing navigation and forms', 2, function suite(test) {

    casper.start(config.url, function () {
        this.viewport(1280, 1024);
    });

    casper.then(function () {
        test.assertTitle("Home - PubMed - NCBI", "Title is Home - PubMed - NCBI");
        this.fill('form#EntrezForm', config.form, true);
    });

    //Changes made here!
    casper.waitForText("Search results", function () {
        test.assertUrlMatch(/pubmed\/\?term=Hello/, 
            'New location is ' + this.getCurrentUrl());
    });

    casper.run(function () {
        test.done();
    });

});

enter image description here

更新尝试

添加失败条件并抓取屏幕以查看发生了什么(或未发生的事情)

casper.waitForText("Search results", function () {
  test.assertUrlMatch(/pubmed\/\?term=Hello/, 
  'New location is ' + this.getCurrentUrl());
}, function() {
  casper.capture("grab.png");
});

您还可以在casper.test

的正下方添加用户代理字符串
casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X)');    

此外,您可以尝试增加超时时间,例如超过5秒。

    casper.waitForText("Search results", function () {
        test.assertUrlMatch(/pubmed\/\?term=Hello/, 
            'New location is ' + this.getCurrentUrl());
    }, null, 10000);

更新尝试 - 长时间拍摄!

尝试替换此同志。它应填写表格并同时提交......

casper.then(function () {
  test.assertTitle("Home - PubMed - NCBI", "Title is Home - PubMed - NCBI");
  this.fillSelectors('form', {
    "input[id='term']": "Hello"
  }, true);
});