- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试对某些分析跟踪代码进行一些自动化测试,但当我尝试将 links
传递到 each()
方法时遇到了问题。
我从 stackoverflow - how to follow all links in casperjs 复制了很多这个, 但我不需要返回链接的 href
;我需要返回链接本身(这样我才能点击它)。我不断收到此错误:each() 仅适用于数组。
我不是返回数组吗?
更新:
对于每个具有 .myClass 的 anchor 标记,单击它,然后从 casper.options.onResourceReceived
返回请求的参数,例如事件类别、事件操作等。我可能会也可能不会取消点击后发生的导航;我只需要审核请求,不需要加载后续页面。
测试步骤:
.myClass
的链接>我是 javascript 和 casper.js 的新手,所以如果我误解了,我深表歉意。
另一项更新:我更新了代码以返回一个类数组。不过,其中有一些粗略的代码(请参阅内联评论)。
但是,我现在在点击后取消导航时遇到问题。 .Clear() 取消了所有的js。无论如何要防止点击后发生默认操作?像 e.preventDefault();
吗?
var casper = require('casper').create({
verbose: true,
logLevel: 'debug'
});
casper.options.onResourceReceived = function(arg1, response) {
if (response.url.indexOf('t=event') > -1) {
var query = decodeURI(response.url);
var data = query.split('&');
var result = {};
for (var i = 0; i < data.length; i++) {
var item = data[i].split('=');
result[item[0]] = item[1];
}
console.log('EVENT CATEGORY = ' + result.ec + '\n' +
'EVENT ACTION = ' + result.ea + '\n' +
'EVENT LABEL = ' + decodeURIComponent(result.el) + '\n' +
'REQUEST STATUS = ' + response.status
);
}
};
var links;
//var myClass = '.myClass';
casper.start('http://www.leupold.com', function getLinks() {
links = this.evaluate(function() {
var links = document.querySelectorAll('.myClass');
// having issues when I attempted to pass in myClass var.
links = Array.prototype.map.call(links, function(link) {
// seems like a sketchy way to get a class. what happens if there are multiple classes?
return link.getAttribute('class');
});
return links;
});
});
casper.waitForSelector('.myClass', function() {
this.echo('selector is here');
//this.echo(this.getCurrentUrl());
//this.echo(JSON.stringify(links));
this.each(links, function(self, link) {
self.echo('this is a class : ' + link);
// again this is horrible
self.click('.' + link);
});
});
casper.run(function() {
this.exit();
});
最佳答案
您要处理两个问题。
通常一个类会被多次使用。所以当你第一次选择基于这个类的元素时,你会得到具有那个类的元素,但不保证这个是唯一的。例如,请参阅您可以通过 .myClass
选择的元素选择:
我的类
myClass myClass2
myClass myClass3
我的类
myClass myClass3
当您稍后迭代这些类名时,您遇到了问题,因为使用 casper.click("."+ links[i].replace("", "永远无法单击 4 和 5 ."))
(您需要另外用点替换空格)。 casper.click
只点击第一次出现的特定选择器。这就是为什么 I used createXPathFromElement
取自 stijn de ryck为页面上下文中的每个元素找到唯一的 XPath 表达式。
然后您可以像这样通过唯一的 XPath 单击正确的元素
casper.click(x(xpathFromPageContext[i]));
这可能取决于您的页面实际是什么。
注意:我使用 casper.test
属性,它是 Tester module .您可以像这样调用 casper 来访问它:casperjs test script.js
。
注意:还有 casper.waitForResource
功能。看看吧。
当点击意味着将加载新页面时,您可以将事件处理程序添加到 page.resource.requested
事件。然后,您可以abort()
请求
,而无需将页面重置回startURL
。
var resourceAborted = false;
casper.on('page.resource.requested', function(requestData, request){
if (requestData.url.match(/someURLMatching/)) {
// you can also check requestData.headers which is an array of objects:
// [{name: "header name", value: "some value"}]
casper.test.pass("resource passed");
} else {
casper.test.fail("resource failed");
}
if (requestData.url != startURL) {
request.abort();
}
resourceAborted = true;
});
在测试流程中:
casper.each(links, function(self, link){
self.thenClick(x(link));
self.waitFor(function check(){
return resourceAborted;
});
self.then(function(){
resourceAborted = false; // reset state
});
});
可能附加了很多事件处理程序,很难全部阻止。一种更简单的方法(至少对我而言)是
这基本上就是我在 this answer 中所做的.
因为单页应用程序不加载页面。 navigation.requested
和 page.resource.requested
不会被触发。你需要 resource.requested
事件,如果你想检查一些 API 调用:
var clickPassed = -1;
casper.on('resource.requested', function(requestData, request){
if (requestData.url.match(/someURLMatching/)) {
// you can also check requestData.headers which is an array of objects:
// [{name: "header name", value: "some value"}]
clickPassed = true;
} else {
clickPassed = false;
}
});
在测试流程中:
casper.each(links, function(self, link){
self.thenOpen(startURL);
self.thenClick(x(link));
self.waitFor(function check(){
return clickPassed !== -1;
}, function then(){
casper.test.assert(clickPassed);
clickPassed = -1;
}, function onTimeout(){
casper.test.fail("Resource timeout");
});
});
关于javascript - 单击具有给定类的页面上的所有 anchor 标记,但在导航之前取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24603365/
当用户将鼠标悬停在 anchor 上时,除了悬停的 anchor 之外的每个 anchor 都会改变颜色。假设有 link1 link2 link3。如果用户将鼠标悬停在 link1 上,我希望更改
'; echo "".$value['eventsearchresultwhat'].""; echo "\n"; echo $value['eventsearchr
我有几个多列下拉菜单作为我的主导航的一部分。由于某种原因,两个多列下拉菜单中每个链接周围的 anchor 命中区域位于链接本身上方。我该如何修复它,使点击区域像普通 anchor 一样以链接文本为中心
我正在 android studio 中创建内部构建 AR 导航。我正在寻找一种方法将 anchor 与其他 anchor 或 anchor 节点/节点“连接”起来。我不确定使用哪一个。基于我将强制用
我有很多 anchor 可以在 doxygen 中描绘,例如 \anchor pic_foo \image html foo.gif "My Caption" \anchor pic_bar \ima
我有 3 个 anchor block ,当我加载页面时,我需要 3 个不同的随机 background-colors。然而,只有第一个 anchor 随机改变 background-color。这是
我有一个带有 float 顶部导航栏的网页。我想将 anchor 链接添加到目录以快速定向到页面上的其他位置。 #top { display: flex; z-index: 100; ba
我无法理解为什么将 text-align 属性设置为 right 值,将 span 标签移出 anchor 标签区域(溢出)? HTML文件的结构 a.btn{ border: 1px solid
我需要使用 Jquery 将类“Selected”添加到一个 anchor ,捕获它的唯一方法是通过其属性“active=true”。然后,当用户选择其他 anchor 时,新 anchor 将被设置
我在 hubspot 上有一个基于搜索词查询动态生成的搜索列表页面。 HTML结构如下: a class="hs-search-results__title" href="www.somethi
标题隐晦,但很难解释。使用 Firefox,前往 http://images.google.com进行随机搜索,然后将第一个搜索结果拖到地址栏。您会看到它转到具有图像 anchor 的页面。然后单击“
我正在为 vue-router 不滚动/导航到 anchor 标签(例如:#anchor)而苦苦挣扎。我在 Stack Overflow 上阅读了各种解决方案,但到目前为止都没有奏效。 请在下面找到我
我正在制作 AR 应用程序。要求很简单。在“配置阶段”,我启动应用程序并将一个立方体放在房间的地板上,然后关闭它。稍后当我再次启动应用程序时,当相机面向同一楼层时,立方体应该留在那里。根据我发现的信息
我正在 WordPress 中通过简码展示一组产品。显示屏上有图像和按钮。 问题:只有照片包含指向单个产品页面的链接。关联的按钮没有指向单个产品页面的链接。 这是当前代码:
我正在尝试做一件奇怪的事情。我将解释一般情况,然后按照我想要执行的步骤进行。我有一个 内的项目列表。当我按下一个元素时,必须打开一个模式。在这个模态中,有与 相同的元素。但详细解释了。当模式打开时
尝试从 anchor 克隆文本并将其设置为同一 anchor 的标题属性,但不了解如何使用正确语法的逻辑。 $(document).ready(function () { $('.desc a').c
--- #File A - Lunch: &01 - Chicken - Rice - Sallad ... --- #File B - Mon
我的用例是: 点击屏幕并将“点”保存为起始 anchor 第二次点击屏幕并将“点”保存为结束 anchor 按下按钮将对象从开始 anchor 移动到结束 anchor 我已经构建了自己的节点,该节点
我的菜单和基于#anchors 的导航有问题。我正在使用 JS 函数在滚动时将菜单置于顶部(#stickyheader)。我的菜单上有一个 div,滚动时会消失(#unstickyheader)。该
我目前有这个基础页面淡入淡出脚本函数,当前针对所有 anchor ('a'),但不确定如何准确排除具有类(.noFade)的某个 anchor 淡出。 JS: $(document).ready(fu
我是一名优秀的程序员,十分优秀!