我试图模拟在我的网站中使用JQuery完成的拖放事件.使用我自己的JQuery手动执行"拖放"工作,但是在提交拖放事件的表单提交之后,没有任何事情会发生,因为鼠标拖放事件附加了事件监听器,并且这些听众不会被我的"手动"动作触发.我正在寻找类似于使用Selenium测试jQuery Drag&Drop和Droppable的东西.
这是仅在视觉上有效的代码示例,但不会触发拖放事件处理程序:
// "Simulate" drag&drop
casper.evaluate(function() {
det = jQuery("table#draggableview_secondary_touts_block_order_1 tbody tr").last().detach();
jQuery("table#draggableview_secondary_touts_block_order_1 tbody").prepend(det);
jQuery("form#draggableviews-view-draggabletable-form-secondary-touts-block-order-homepage").submit();
});
Run Code Online (Sandbox Code Playgroud) 在执行CasperJS脚本的过程中,我需要从另一个站点获取并解析JSON数据,以便我可以使用该数据填写我正在积极处理的站点上的表单.
我怎样才能做到这一点?
我必须对我们公司的一些外联网进行测试,我们使用的是phantom.js/casper.js,因为它最容易与我们的其他测试工作流程集成.
尝试通过隧道从HTTP转换到HTTPS时出现问题.如果用户要访问我们的网站http // www.somecompany.com并单击登录链接,他们的浏览器会重定向到https // extranet.somecompany.com.如果您要查看HTML源代码,您会看到正确对应于用户重定向到的表单的HTML.
但是,当尝试使用casper.js重新创建工作流时,我成功启动了登录链接上的click事件.然后,我尝试识别表单元素以确认重定向是否成功,但此测试失败.然后,我在重定向后修改了我的下一步,以捕获页面以查看casper"看到"的内容.当我打开图像时,HTML显示为好像我从未被重定向.我知道重定向正在工作,因为我看到Fiddler中的流量显示隧道正在建立到端口443.
我搜索了SO,谷歌和Casper谷歌组,并且找不到关于从HTTP到HTTPS的重定向,Casper/Phantom是否能够自动化这样的工作流程,还是我必须看看像Selenium这样的东西?
我写了一些casperjs测试来测试我的Django应用程序.如果启动Django应用程序(例如,在端口8000上),则casperjs可以作为单独的进程运行并访问我正在运行的Django应用程序.
我的其他测试是用Django(web)测试框架编写的,该框架使用fixture设置测试数据库,并运行./manage.py test.使用Django webtest,您不需要启动单独的Django Web服务器(执行请求和URL路由是代理/模拟的).
有没有办法从Django webtest中调整casperjs测试?没有启动不同的网络服务器和另一个测试数据库?
我见过ghost.py存在,但尚未尝试过.
我知道如何禁用图像和插件,但似乎没有明显的选项来禁用CasperJS中的CSS.
谁知道它是如何工作的?
我正在尝试使用CasperJS编写一个测试,其中按下输入中的Enter键是页面的触发器,用于输入文本,否则键入输入.
CasperJS测试的缩写/简化版本:
casper.start('http://localhost:3000/input-demo', function() {
this.sendKeys('#demo-input', 'demo text');
this.sendKeys('#demo-input', '\uE007');
this.test.assertEquals(this.getHTML('#stage'), 'input demo');
});
casper.run();
Run Code Online (Sandbox Code Playgroud)
(我们在哪里运行casperjs test this-test.js)
我已经验证sendKeys了将文本输入到输入中,但该文本从未显示在#stage元素中.按键的"vanilla"PhantomJS实现工作正常,webpage.sendEvent('keypress', '\uE007')导致页面上的事件处理程序触发.查看源代码casper.sendKeys,我看到它委托给sendEventCasper实例的PhantomJS实例(即当前版本的casper.js中的第1613行).
有任何想法吗?谁有这些钥匙才能在CasperJS测试中工作?
Tl:dr - 如何从C#项目文件夹中引用CasperJS和PhantomJS?
当我手动将CasperJS和PhantomJS的二进制文件解压缩到C:驱动器时,我有从C#项目运行CasperJS脚本的工作代码.(请参阅此处获取标签为WORKING Code的简单指南和工作代码:)
由于没有安装需要我认为这将是很容易将这些移动到C#项目文件夹,而不是\tools\casperjs和\tools\phantomjs.另外,我需要在代码中使用更新PATH变量p.StartInfo.EnvironmentVariables["PATH"] = EnvPath;
我尝试的所有路径组合都会出现以下错误 "Fatal: [Errno 2] No such file or directory; did you install phantomjs?"
所有文件都已包含在文件路径中.我错过了一些明显的东西吗
非工作代码: [filepaths\tools\casperjs,\ tools\phantomjs&C:\ Python34]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Casper
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string …Run Code Online (Sandbox Code Playgroud) 我很好奇CasperJS如何处理与调用堆栈有关的事件.
假设我们有一些代码:
casper.on('foo', function() {
this.wait(60000);
this.echo('foo');
});
casper.start('http://www.stackoverflow.com', function() {
this.echo('start');
this.emit('foo');
});
casper.then(function() {
this.echo('done');
});
casper.run();
Run Code Online (Sandbox Code Playgroud)
我知道then()将等待检查3个标志:pendingWait,loadInProgress和navigationRequested.打印出调用堆栈会将emit调用显示在函数start()中,因此在事件结束之前start()不会被视为已完成?即,然后()等待事件结束
我等了60秒测试了这个,我确实得到了输出:
start
foo
done
Run Code Online (Sandbox Code Playgroud)
虽然我不确定超过某个超时是否会触发下一个().
我用CasperJS编写了一个web抓取脚本,它在Mac OS 10.10.4上完美运行,CasperJS版本1.1.0-beta3和PhantomJS版本1.9.8,但当我在我的一台服务器上放置相同的脚本时,就是Ubuntu 14.04(在具有相同环境(CasperJS和PhantomJS所有相同版本)的Docker容器内运行时,它突然输出:
我是`fs`模块
这很奇怪.我的一个建议是,在这个脚本中我也试图要求其他一些需要的脚本:
var parsingStrategy = require(strategiesPath + strategyName);
Run Code Online (Sandbox Code Playgroud)
并且这些策略的路径是正确的我已经检查过了.我在这个脚本中所做的所有其他事情都只是正常的CasperJS内容,我认为这些内容已经记录并且运行良好.
我试图使用casper从youtube实时聊天源中删除文本.我在选择正确的选择器时遇到问题.每个被推出的新消息都有许多嵌套元素和动态生成的元素.怎么可能继续拉嵌套
<span id="message">some message</span>
他们发生了什么?我目前似乎无法抓住一个甚至一个!这是我的测试代码:注意:您可以替换任何具有实时聊天Feed的youtube网址.
const casper = require("casper").create({
viewportSize: {
width: 1080,
height: 724
}
});
const ua = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0'
const url = "https://www.youtube.com/watch?v=NksKCLsMUsI";
casper.start();
casper.userAgent(ua)
casper.thenOpen(url, function() {
this.wait(3000, function() {
if (this.exists("span#message")) {
this.echo("found the a message!");
} else {
this.echo("can't find a message");
}
casper.capture("test.png");
});
});
casper.run();
Run Code Online (Sandbox Code Playgroud)
我的问题正是这样.如何正确选择消息?2,我怎么能不断听新的呢?
更新:我一直在玩噩梦(电子测试套件),这看起来很有希望,但我仍然无法选择聊天元素.我知道我错过了一些简单的事情.
编辑/更新(使用cadabra的好例子)
var casper = require("casper").create({
viewportSize: {
width: 1024,
height: 768
}
});
url = 'https://www.youtube.com/live_chat?continuation=0ofMyAMkGiBDZzhLRFFvTFJVRTFVVlkwZEV4MFRFVWdBUSUzRCUzRDAB'
ua = …Run Code Online (Sandbox Code Playgroud)