使用 href/Javascript 访问锚点
Accessing anchor with href/Javascript
在一个系统上测试 CasperJS,该系统有一个锚点,并将 href 附加到 javascript。做平常的事
casper.then(function() {
this.evaluate(function() {
// document.querySelector('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]').click(); // works in FF
// window.onload=submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH');
//eval("submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH_1');");
//submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH');
// window.onload=submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH');
// this.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]');
// click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]');
// self.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]');
// this.this.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]');
..
});
});
上述方法均无效。项目的 Git 存储库表明 Casper 有一个 CasperUtils/ClientUtils 库,该库似乎有一个具有单击方法的__utils__
,该方法是调用href="javascript:foo()"
元素的方式。
但是,我似乎无法弄清楚如何运行它。
如果有人使用过CasperJS,并且有关于如何实现的代码示例,我们将不胜感激!
理想情况下,最终结果应该是这样的:
casper.then(function() {
e=document.querySelector("id['foo']");
CasperUtilsSomething.click(e);
});
或者,如果你有一个指向我可以运行的测试代码用例的指针,这将让我们看到应该如何实现它。
看起来这里的问题是围绕函数范围的混淆。这是使用 PhantomJS(CasperJS 构建在其上(的棘手之处 - 有两个完全独立的作用域,其中一个在 PhantomJS 上下文中运行并可以访问 casper
对象,以及远程代码运行的"沙箱"作用域 - 例如,在 casper.evaluate()
中运行的任何内容都在远程上下文的沙箱中运行, 无法访问 casper
对象或其方法。
因此,尝试在casper.evaluate()
中调用this.click()
将失败 - 您正在运行的函数无法访问casper
实例,并且this
将在浏览器中引用window
对象。
通常,您执行此操作的方式只是:
casper.then(function() {
casper.click('#CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH');
casper.evaluate(function() {
// some function that needs to run after clicking
});
});
另请注意,据我所知,您通常无法在casper.evaluate()
中运行任何window.onload
代码 - 在您运行代码时,窗口的load
事件已经触发。
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 如何在不知道关键字的情况下访问javascript对象值
- 可以't访问JavaScript函数范围中的变量
- 使用XPath样式访问Javascript JSON对象属性
- 访问javascript文件输入变量的值
- 如何访问Javascript代码中的rails变量
- jQuery.ajax()访问javascript循环中的beforeEnd局部变量
- 从Jade访问javascript库
- PHP/AAJAX-使用PHP中的$_FILES访问javascript文件数组
- 访问Javascript对象-Node.js的作用域问题
- 从HTML中的另一个文件访问javascript方法
- 存在其他参数时访问Javascript事件
- 如何使用Perl访问JavaScript驱动的网页内容
- 访问JavaScript对象中的方法
- 访问 JavaScript 数组值
- 如何在 setinterval 函数中访问 javascript 数组值
- 在 Java 中访问 JavaScript 对象的字段
- 使用传递给函数的值访问 JavaScript 数组
- 使用相同的名称访问Javascript属性
- 无法访问javascript中二维数组中的第二个字段