如果我想使用测试仪API,并使用说assertSelectorExists,我怎么能等待选择器?我知道你可以使用waitForSelector的onTimeout回调并在那里手动创建一条消息,但它似乎打败了能够断言的目的......
今天我尝试使用CasperJS和PhantomJS一起向远程页面注入一些javascript逻辑.
嗯,我很惊讶因为:
casper.then(function() {
console.log(this.evaluate(function() {
function myMethod() {
return 'Any thing?!';
}
return myMethod();
}));
console.log(this.evaluate(function() {
return myMethod();
}));
});
Run Code Online (Sandbox Code Playgroud)
我试过很多组合...喜欢:
casper.evaluate(...)
this.evaluate(...)
casper.page.evaluate(...) <- directly to phantomJS
this.page.evaluate(...) <- as above
Run Code Online (Sandbox Code Playgroud)
第一个案例给了我我想要的东西.但接下来要求评估作为一个白痴,从未见过上面执行过的代码.
我只想更改变量,函数和其他远程站点js运行时.
任何人都可以告诉我为什么会这样吗?问候.
我有以下表格:
<form name="security_page_toplevel_page_itsec_settings" method="post" action="options.php">
<select id="itsec_strong_passwords_roll" name="itsec_strong_passwords[roll]">
<option value="admin">admin</option>
<option value="subscriber">subscriber</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
但我无法使用以下代码选择"订户"选项:
this.fillSelectors('form#security_page_toplevel_page_itsec_settings', {
'select[name="itsec_strong_passwords[roll]"]': 'subscriber'
}, true);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我的网页有一个输入键按下事件的监听器.我试图运行下面的casperjs代码来触发此事件,但没有成功.
虽然没有提示错误,但是(evaluate)函数返回true并且代码在我的chrome控制台上工作正常,应该向服务器发送请求的函数结果永远不会发生
casper.then(function(){
var result = this.evaluate(function(term){
var search_form_id = "#search-form";
$(search_form_id).val(term);
jQuery(search_form_id).trigger(jQuery.Event('keypress', {which: 13, keyCode: 13}));
return true;
}, 'Techcrunch');
console.log(result);
});
Run Code Online (Sandbox Code Playgroud)
这是关于PhantomJS和jQuery事件的任何问题吗?
Casperjs是一个很棒的工具.我已经能够理解某些基础知识.但是,我正在努力解决两个问题.首先,为了关闭原因,我将代码分成几个函数.我得到一个解析错误.我已经添加了选项verbose: true, logLevel: "debug",看它是否指出了行号,但我没有得到任何结果.其次,我想做一个异步的ajax调用.我正在使用,waitFor但我读了这篇文章是为了更有效的方式.如何设置waitForResource()跟踪AJAX请求?以及如何显示解析错误行?
码
var urls = ['http://9gag.tv/'];
var casper = require('casper').create({
verbose: true,
logLevel: "debug"
});
function getNumberOfItems(casper) {
return casper.getElementsInfo(".listview .badge-grid-item").length;
}
function tryAndScroll(casper) {
casper.page.scrollPosition = { top: casper.page.scrollPosition["top"] + 4000, left: 0 };
var info = casper.getElementInfo('.badge-post-grid-load-more');
if (info.visible) {
var curItems = getNumberOfItems(casper);
if( curItems <= 60 ) {
casper.waitFor(function check(){
return curItems != getNumberOfItems(casper);
}, function then(){
tryAndScroll(this);
}, function onTimeout(){
this.echo("Timout reached");
}, 10000); …Run Code Online (Sandbox Code Playgroud) 任何人都知道如何在casperjs中找出这个错误的原因?我试图在运行时运行的测试脚本是:
var errors = [];
casper.on("page.error", function(msg, trace) {
this.echo("Error: " + msg, "ERROR");
this.echo("file: " + trace[0].file, "WARNING");
this.echo("line: " + trace[0].line, "WARNING");
this.echo("function: " + trace[0]["function"], "WARNING");
errors.push(msg);
});
casper.on('resource.received', function(resource) {
var status = resource.status;
if(status >= 400) {
casper.log('Resource ' + resource.url + ' failed to load (' + status + ')', 'error');
errors.push({
url: resource.url,
status: resource.status
});
}
});
casper.test.begin('Are we online?', 3, function suite(test) {
casper.start("http://www.google.com/", function() {
test.assertTitle("Google", "Connected to google, internet …Run Code Online (Sandbox Code Playgroud) 如何对悬停在元素上后变为可见的元素执行单击事件.下面是HTML代码
<div class="jqtree-element jqtree_common">
<span class="jqtree-title jqtree_common" contenteditable="true">Notebook 1</span>
<span class="notebook-right">
<span class="notebook-date disappear" style="visibility: visible;">
<span class="notebook-commands-right">
<span class="notebook-commands appear-wrapper">
<span class="notebook-commands appear" style="display: none;">
<span class="fontawesome-button info">
<span class="fontawesome-button history">
<span class="fontawesome-button private">
<span class="fontawesome-button public" style="display: none;">
<span class="fontawesome-button remove">
<i class="icon-remove"></i>
</span>
</span>
</span>
</span>
</div>
Run Code Online (Sandbox Code Playgroud)
删除笔记本我正在使用以下代码
casper.then(function(){
if(this.visible({type:'xpath', path:'/html/body/div[3]/div/div[1]/div[1]/div/div/div[1]/div[2]/div/div/ul/li[1]/ul/li[1]/ul/li[11]/div/span[2]/span[3]/span/span[5]/i'}))
{
this.click({type:'xpath', path:'/html/body/div[3]/div/div[1]/div[1]/div/div/div[1]/div[2]/div/div/ul/li[1]/ul/li[1]/ul/li[11]/div/span[2]/span[3]/span/span[5]/i'});
});
console.log('notebook '+ title +' deleted');
} else {
console.log('element not found');
}
});
Run Code Online (Sandbox Code Playgroud)
在控制台中显示"无法调度mousedown事件.."
只是为了澄清,我不想等待一个条件,只需暂停n秒.这是我的代码,但是id不能按我预期的方式工作,我怀疑"等待"是异步的.我希望更改代码,以便打印1,等待5秒,打印2,然后打印3.现在它打印1,打印3,然后等待5秒并打印2.
var casper = require('casper').create();
var x = require('casper').selectXPath;
var fs = require('fs');
var parsedFile = "pfile.txt";
casper.start();
function wait5seconds() {
casper.wait(5000, function() {
this.echo('2');
});
}
casper.then(function() {
this.echo('1');
wait5seconds();
this.echo('3');
});
casper.run();
Run Code Online (Sandbox Code Playgroud) 如何evaluate在CasperJS中调试javascript函数(使用)?
这里有什么类似的东西alert()可以在需要时在命令行上打印值吗?
我想将数据从casper JS传递到我目前使用的CSV文件
fs = require('fs');
fs.write('test.csv', "name, title", "a");
fs.write('test.csv', name.trim()+","+title.trim(), "a");
Run Code Online (Sandbox Code Playgroud)
这是一个循环,所以有很多记录
但是打印到CSV文件不会插入新行.它目前写得像这样,我只想要2列
Name Title
name1 name1 name2 title2 name3 title3
Run Code Online (Sandbox Code Playgroud) casperjs ×10
javascript ×9
phantomjs ×4
ajax ×1
debugging ×1
forms ×1
hover ×1
html-select ×1
jquery ×1
testing ×1