- 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/
“Fail Early”是什么意思,在什么情况下这种方法最有用,你什么时候会避免这种方法? 最佳答案 本质上,快速失败 (又名 尽早失败 )是对您的软件进行编码,使得 当出现问题时,软件会尽快并尽可能
/* * 115200. Connect GPIO 0 of your ESP8266 to VCC and reset the board */ #include #include #inc
安装并注册 gitlab-runner 后,当我运行时 gitlab-runner start我收到此错误消息。这是什么原因? Runtime platform
我一直在尝试Windows Server 2016 TP5上的Windows容器。突然我在运行带有端口映射选项-p 80:80的容器时开始出错 c:\>docker run -it -p 80:80
我一直在关注 Hyperledger Fabric Multi-Org setup 的教程,我能够成功地做到这一点。现在我想根据我想要的组织名称对其进行自定义,并且在尝试连接网络时遇到以下错误。希望有
所以我不知道为什么这个测试失败了。当我运行 repl 中的语句时,一切似乎都正常工作,但 fiveam 测试失败。 以下要点中有一个测试用例:https://gist.github.com/Puerc
我安装了 Android Studio 1.2.1.1、Gradle 版本 2.2.1 和 Android 插件版本 1.2.3。我试图创建一个简单的 hello world 项目,它给了我一个构建失
我正在尝试设置一个简单的 WebTestCase,它使用 Symfony 4(和 "phpunit/phpunit": "^6.5")。但是,测试失败: Failed to start the ses
我已经使用 git clone 在本地克隆了一个包含 Vue 项目的 git 存储库. 然后我跑了npm install安装依赖项并获得 node_modules文件夹。 正在运行 npm run s
我有:http://windows.github.com/ 我当前的项目有大约 20k 个文件,大约 150MB(并且不说它有多慢而且我现在什么也做不了)它甚至不允许我提交!我收到此错误:提交失败:无
我正在使用 RxAndroidBle 库开发一个应用程序,该库大约每 30 秒定期执行 BLE 扫描,每分钟左右执行一些 BLE 操作。几个小时后,通常在 5 到 24 小时之间,扫描停止工作。每次应
每次我尝试使用 Pycharm 推送 GitHub 中的存储库时,它都会失败。 Push failed: fatal: Authentication failed for 'https://githu
此外,管理内置“管理结构”(如标题中的结构)的 Resque 的最佳实践是什么?我应该用 jedis.del(String key) 或类似的东西清除它们吗? 最佳答案 resque:failed 是
想象这样一种场景,我们想要在对“foo”和“bar”的并发请求成功完成后做一些事情,或者如果其中一个或两个失败则报告错误: $.when($.getJSON('foo'), $.getJSON('ba
这就是我所做的: 我使用的是 Windows XP SP3 我已经安装了 Python 2.7.1。 我下载了instantclient-basic-nt-11.2.0.3.0.zip,解压后放入C:
我已经设置了一个 vfsstream block 设备,我正在尝试对其调用 file_get_contents()。然而,对 vfsStreamWrapper::stream_open 的调用失败,因
我正在尝试在我的 React 应用程序中使用文件上传功能,但遇到了问题。当我尝试上传第一张图片时,它工作得很好。文件资源管理器对话框关闭并显示我的图片。用我的文件资源管理器中的另一张图片覆盖图片也可以
目标:将我的本地 mongodb 数据迁移到 mongodb atlas 集群。 尝试: 1.将本地数据导出为json。 2.导入json到集群。 操作系统:Linuxmint 19.1 Cinnam
我一直在从事一个需要在服务器(托管在 GCE 上)和多个客户端之间进行一些网络连接的项目。我创建了一个 Compute Engine 实例来运行 Python 脚本,如以下视频所示:https://w
我正在尝试使用 sqlx crate 和 Postgres 数据库连接到 Rust 中的数据库。 main.rs: use dotenv; use sqlx::Pool; use sqlx::PgPo
我是一名优秀的程序员,十分优秀!