javascript - 使用 eval() 结果在 CasperJS 中填写表单

标签 javascript phantomjs casperjs

我们如何将 eval() 的值传递给变量以填充密码文本框。

这是我的 CasperJS 代码。它显示它找不到变量y

var fs = require('fs');
var casper = require ('casper').create();
var page = require('webpage').create();

casper.start('http://thedemosite.co.uk/login.php', function() {
    this.echo(this.getTitle());
    this.capture('loginbefore.bmp');

    casper.then ( function () {
        casper.evaluate(function(username, password) {
           document.querySelector('#username').value = username;
           document.querySelector('#password').value = password;
           document.querySelector('#FormsButton2').click();
        }, 'PP406214795IN', y));

        casper.then (function () {
            var fs = require('fs');
            var test = fs.read('readingjs.js');
            var y = eval(test);
        });
        this.wait(5000, function() {
            this.echo("I've waited for a  5 second.");
        });
    });
});
casper.run();

最佳答案

您的代码有两个问题。

  • 在 JavaScript 中通过 var 关键字定义的变量位于本地函数作用域内。它们只能在此函数和该函数中定义的闭包中访问。如果要使用全局变量,则需要在全局作用域或更高的函数作用域中定义它。

  • 所有 casper.then*()casper.wait*() 都是异步步骤函数。这意味着它们将按照您调用它们的顺序依次执行。由于您在定义之前使用了 y,因此您需要交换顺序,但请记住,所有其他函数(例如 casper.evaluate())都不是异步的这意味着如果您在 casper.evaluate() 之前调用 casper.then(),则 then() 内的代码将在evaluate() 代码。

由于 fs.read()eval() 是同步函数,因此您只需将文件读取和 eval 向上移动即可,如下所示这个:

casper.start('http://thedemosite.co.uk/login.php', function() {
    this.echo(this.getTitle());
    this.capture('loginbefore.bmp');
});

casper.then(function(){
    var fs = require('fs');
    var test = fs.read('readingjs.js');
    var y = eval(test);

    this.evaluate(function(username, password) {
       document.querySelector('#username').value = username;
       document.querySelector('#password').value = password;
    }, 'PP406214795IN', y);
    this.click('#FormsButton2');
});

casper.then(function(){
    this.capture("loginAfter.png");
});

casper.run();

关于javascript - 使用 eval() 结果在 CasperJS 中填写表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31766450/

相关文章:

javascript - 启用和禁用 onkeydown 事件?

javascript - phantomjs 无法正确显示 Angular 数据

javascript - CasperJS:在点击事件中引用 DOM 元素而不是选择器

javascript - 使用 UFT 自动化 AngularJS UI-Grid

javascript - 请求中的 node.js 多个函数

java - selenium + phantomJS Web 元素内部异常

javascript - 如何使用 Capybara/Poltergeist 在页面上运行一个函数?

javascript - Casperjs:如何打印 http 请求和响应?

javascript - 如何在Casper js中设置测试用例失败并传递消息?

javascript - 在 Meteor 0.8.0 (Blaze) 中实现可选择的项目列表