我们一直在使用 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,只是我们没有对其进行测试。它既是图像裁剪工具,又是使用拖放功能的输入滑块。我们认为在 IE 浏览器中脚本最有可能被破坏,因此让测试正常工作会很好。
当我在运行测试时控制 SauceLabs 中的浏览器时,有时单击页面主体实际上会帮助 dragAndDrop 方法工作。这几乎是我现在唯一的线索。我尝试使用 Seleniumsclick()
方法来模拟它,甚至在 JavaScript 中执行它。
this.execute('var event=document.createEvent("MouseEvent");
event.initEvent("click",true,true,window,0,50,120);
document.body.dispatchEvent(event);');
但没有任何运气。我不知道 Selenium 中是否存在错误或问题所在。我花在谷歌上的时间让我一点也不聪明。任何帮助将不胜感激。
更新
到目前为止,我已经尝试document.body.focus()
按照建议将焦点放在身体上。我尝试使用不同的目标来模拟 JavaScript 鼠标点击和原生 WebDriver 点击。试图复制我在 SauceLabs 中控制 VM 时发生的事情。没有任何效果,我什至不确定它是否可以解决问题。
我还应该澄清这不是页面上的第一个操作。初始导航后,填充了两个输入字段,然后测试等待 AJAX 调用完成。然后,当可以找到适当的元素时,运行此方法。