我正在编写一些工作测试代码,并试图弄清为什么会引发错误。我正在使用一种面向对象的方法来保持主脚本尽可能整洁。我有一个脚本包含了我所有的元素路径,称为elements.js。我正在使用幻影将该脚本注入到另一个包含名为click.js的click方法的文件中。例子:
function Click() {
phantom.page.includeJs('/my/path/to/elements.js');
var element = new Elements();
this.clickElement = function() {
casper.then( function() {
casper.click(element.nameOfElement);
});
};
}
以这种方式运行脚本会引发未定义的错误,但是,如果我在click.js脚本中直接声明元素的路径,则测试可以正常运行:
function Click() {
var nameOfElement = ('css > path > to > element');
this.clickElement = function() {
casper.then( function() {
casper.click(nameOfElement);
});
};
}
我想从一个来源调用所有元素路径,只是为了保持脚本的整洁,您可以想象它们会变长,具体取决于我们正在测试的元素数。我也有其他文件需要用于此测试的元素路径,但它们遵循与上述click.js脚本相同的原则。
更新
这是我的element.js脚本的样子:
function Elements() {
var nameOfElement = ("css path");
var anotherElement = ("css path");
}
我通过进入一个菜鸟脑中的屁来解决了这个问题。在我的element.js脚本中,我添加了一个简单的get方法,它现在可以工作。
function Elements() {
var someElement = "css path";
this.getSomeElementPath = function() {
return someElement;
};
}
在我的click.js脚本中将其称为:
function Click() {
phantom.page.injectJs('path/to/element.js');
var element = new Elements();
this.clickSomeElement = function() {
casper.then( function() {
casper.click(element.getSomeElementPath());
});
};
}
而且,在我的主要脚本中:
'use strict':
phantom.page.injectJs('/path/to/element.js');
phantom.page.injectJs('/path/to/click.js');
var element = new Element();
var click = new Click();
casper.test.begin("Test", function (test) {
var url = www.url.com;
console.log(url);
casper.start(url);
casper.then(function() {
click.clickSomeElement();
});
....//rest of code
casper.run(function() {
casper.test.done();
});
});
现在,测试将按预期运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句