- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我们一直在使用 SauceLabs 进行夜间 Jenkins CI 测试。我们在 Windows 8 下的 Firefox 24 中运行测试没有任何问题。现在我们想要扩展测试并在更多平台和浏览器上运行它们。我们的目标是在 Windows 和 OSX 以及 IE11、10 和 9 下的最新 Firefox 和 Chrome 浏览器中运行测试。
测试是使用 webdriver/selenium2 的 Node.js 客户端编写的 https://github.com/admc/wd
我现在遇到的问题是让我们的 DragAndDrop 方法在 IE11 和 IE10 中工作。它在最新的 Firefox、Chrome 和 IE9 中运行良好。
代码:
dragAndDrop: function (elem, x, y) {
var i = 0,
parent = elem.elementByXPath('..'),
offsetX,
offsetY,
pos,
offsetPos,
size;
offsetPos = this.getLocationInView(elem);
pos = this.getLocationInView(parent);
size = this.getSize(elem);
offsetX = offsetPos.x - pos.x + ~~(size.width / 2);
offsetY = offsetPos.y - pos.y + ~~(size.height / 2);
this.moveTo(parent, offsetX, offsetY);
this.buttonDown(0);
if(typeof x !== 'undefined' && x) {
for(; i <= x; i++) {
this.moveTo(parent, offsetX + i, offsetY);
}
}
if(typeof y !== 'undefined' && y) {
i = 0;
for(; i < y; i++) {
this.moveTo(parent, offsetX, offsetY + i);
}
}
this.buttonUp(0);
}
网站上的拖放脚本可以在 IE11 和 IE10 中运行,但未经我们测试。它既是图像裁剪工具,又是使用拖放功能的输入 slider 。我们认为在 IE 浏览器中脚本被破坏的风险最大,所以如果测试能正常工作那就太好了。
当我在 SauceLabs 中控制浏览器时,当测试运行时,单击页面主体有时实际上会帮助拖放方法工作。这几乎是我现在唯一的线索。我尝试使用 Seleniums click()
方法来模拟它,甚至在 JavaScript 中执行它。
this.execute('var event=document.createEvent("MouseEvent");
event.initEvent("click",true,true,window,0,50,120);
document.body.dispatchEvent(event);');
但没有任何运气。我不知道 Selenium 是否有 bug 或者问题出在哪里。我在谷歌上花费的时间并没有让我变得明智。任何帮助将不胜感激。
到目前为止,我已尝试按照建议使用 document.body.focus()
将焦点设置到正文。我尝试使用不同的目标来模拟 JavaScript 鼠标单击和 native WebDriver 单击。尝试复制当我控制 SauceLabs 中的虚拟机时发生的情况。没有任何效果,我什至不确定它是否能解决问题。
我还应该澄清,这不是页面上的第一个操作。初始导航后,两个输入字段被填充,然后测试等待 AJAX 调用完成。然后,当找到正确的元素时,将运行此方法。
最佳答案
下面是 pstenstrm 解决方案的改进版本,用于考虑元素在 X 和 Y 方向上的移动。
/*
pageX
pageY
distanceX
distanceY
id
className
###############
The variables above were defined in the closure scope of function
running the execute function.
*/
var mousedown = document.createEvent("MouseEvent"),
mouseup = document.createEvent("MouseEvent"),
elem = document.getElementById(id),
result = [],
elems = elem.getElementsByTagName("*"),
k = 0,
j = 0,
i, interval;
for(i in elems){
if((" " + elems[i].className + " ").indexOf(" " + className + " ") > -1){
result.push(elems[i]);
}
}
mousedown.initMouseEvent("mousedown", true, true, window, 0, 0, 0, pageX, pageY, 0, 0, 0, 0, 0, null);
result[0].dispatchEvent(mousedown);
interval = setInterval(function(){
if(k !== distanceX){k++;}
if(j !== distanceY){j++;}
iter(k,j);
if(k === distanceX + 1 && j === distanceY + 1){
clearInterval(interval);
mouseup.initMouseEvent("mouseup", true, true, window, 0, pageX + k, pageY + j, pageX + k, pageY + j, 0, 0, 0, 0, 0, null);
result[0].dispatchEvent(mouseup);
}
}, 100);
function iter(_x,_y){
var mousemove = document.createEvent("MouseEvent");
mousemove.initMouseEvent("mousemove", true, true, window, 0, 0, 0, pageX + _x, pageY + _y, 0, 0, 0, 0, 0, null);
result[0].dispatchEvent(mousemove);
}
新的dragAndDrop看起来像:
dragAndDrop: function (elem, x, y, id, className) {
var i = 0,
offsetX,
offsetY,
pos, offsetPos,
size;
this.sleep(2000);
offsetPos = this.getLocationInView(elem);
size = this.getSize(elem);
pageX = offsetPos.x + ~~(size.width / 2);
pageY = offsetPos.y + ~~(size.height / 2);
// No linebreaks
this.execute('var mousedown=document.createEvent("MouseEvent"),mouseup=document.createEvent("MouseEvent"),elem=document.getElementById("' + id + '"),result=[],elems=elem.getElementsByTagName("*"),k=0,j=0,i,interval;for(i in elems){if((" "+elems[i].className+" ").indexOf(" ' + className + ' ")>-1){result.push(elems[i]);}}mousedown.initMouseEvent("mousedown",true,true,window,0,0,0,' + pageX + ',' + pageY +',0,0,0,0,0,null);result[0].dispatchEvent(mousedown);interval=setInterval(function(){if(k!==' + x + '){k++;};if(j!==' + y +'){j++;};iter(k,j);if(k===' + x + '+1&&j===' + y + '+1){clearInterval(interval);mouseup.initMouseEvent("mouseup",true,true,window,0,' + pageX + '+k,' + pageY +'+j,' + pageX + '+k,' + pageY +'+j,0,0,0,0,0,null);result[0].dispatchEvent(mouseup);}},100);function iter(_x,_y){var mousemove=document.createEvent("MouseEvent");mousemove.initMouseEvent("mousemove",true,true,window,0,0,0,' + pageX + '+_x,' + pageY + '+_y,0,0,0,0,0,null);result[0].dispatchEvent(mousemove);}');
// Give the script time to execute and take a nap
this.sleep(x*100+3000);
}
关于node.js - Selenium 网络驱动程序 : dragAndDrop method fails in IE11 and IE10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705100/
我用运行 Node node --debug app OR node --debug-brk app 它有反应 debugger listening on port 5858 Express serv
这个问题在这里已经有了答案: What is the difference between (int *i) and (int* i) in context of both C and C++? [
我有一个应用程序,它通过消息队列将数据库写入命令分派(dispatch)给工作人员(数量非常大),因此无法保证它们的接收顺序。 我有两个 Node ,例如“Account”和“Media”。在此假设的
有没有办法在调用 ts-node 时将选项传递给 Node ?我正在尝试在 Node 中使用一个实验性功能,如果它能与 ts-node 一起使用,那就太好了。 这就是我目前正在做的事情: ts-nod
我有一个容器化的Node应用程序,它在DigitalOcean服务器上运行。当我更新服务器上的应用程序时,该应用程序必须关闭一小段时间。为了能够更新应用程序并避免停机,我目前正在阅读零停机时间部署/蓝
我正在编写一个 Node.js 应用程序。我正在使用 request 和 Cheerio 加载一组 URL 并获取该网站的大量信息,现在假设我想要获取的只是标题: var urls = {"url_1
如果不弹出以下错误,我无法安装任何 Node.js 模块。错误代码引用package.json文件。如果知道为什么会发生这种情况,我们将不胜感激。 最佳答案 这些不是错误,它们只是警告。一切都应该如此
如果我运行(从我的项目目录中): supervisor javascripts/index.js 我得到:/usr/bin/env: Node :没有这样的文件或目录 如果我运行: node java
我已遵循使用 Node-Inspector 的所有步骤 但是当我打开应用程序时,我在控制台上看不到任何脚本或日志。 我的应用程序在端口 4000 上运行。我认为唯一可能发生冲突的是端口 8080 上的
我在android中使用rxjava2,有时会遇到这样的问题: Observable.fromArray( // maybe a list about photo url in SD
我目前正在使用 Node 光纤来编写同步服务器端代码。我主要通过 try-catch block 进行错误处理,但外部库或其他小部分异步代码中总是有可能发生错误。我正在考虑使用新的域功能来尝试将这些错
看起来node-debug是node-inspector周围的一个shell?分别什么时候应该使用? 最佳答案 如果您安装node-debug,您只能访问node-debug命令。 如果您安装node
我目前正在代理后面工作,该代理不允许我执行此命令的 HTTP GET 请求阶段: Node node-sass/scripts/build.js 请求阶段: gyp http GET https://
听说node js可以用在服务端。我以前用过jsp。 jsp页面内部的java代码对客户端是不可见的。如果 Node js 只是 javascript,那么它如何对客户端不可见? 最佳答案 首先,No
我正在为 Node native 插件从 node-waf 构建迁移到 node-gyp 构建系统。 node-gyp 说它支持多个目标版本,但我在使用 node-gyp 时找不到如何指定目标 Nod
给定一个 $node ,我正在尝试在以下两种输出该 $node 的方式之间做出决定。 要么 $output = theme('node', $node); 或 node_build_content($
如果package.json中的窗口A打开一个新窗口B,node-main如何访问它?这是我的代码: package.json { "main": "index.html",
我试图在我的 xml 中的特定节点 ( ) 之前插入一个注释节点。这是它的方法: function test(xmlResponse) { var parser = new DOMParse
我正在尝试做npm install wrtc使用 Node 版本 16.14.0 但这还没有完成。它在给npm error code 1所以我试图将 Node 版本更改为以前的 lts 14.19.0
当我在 Visual Studio 中运行 Node.js 应用程序时,我收到以下消息:DeprecationWarning: 'node --debug' 和 'node --debug-brk'
我是一名优秀的程序员,十分优秀!