我正在测试web应用程序(使用RobotFramework和Selenium2Library),其中需要在几个点进行一些拖放操作。我尝试了拖放关键字,但它无法正常工作。
由于我无法通过生产应用程序,我使用以下页面重新创建了问题:https://html5demos.com/drag/
我的代码是:
*** Settings ***
Library Selenium2Library
*** Variables ***
${URL} = https://html5demos.com/drag/
*** Test Cases ***
Prepare Browser
Open_Browser ${url} browser=chrome
Maximize Browser Window
Make Test
#Drag And Drop //*[@id="one"] //*[@id="bin"]
#Drag And Drop //*[@id="two"] //*[@id="bin"]
Capture Page Screenshot
Sleep 1
Close All
Close Browser
尝试使用Python 2.7和3.6。
我得到的输出是测试显示为PASS,但我看不到拖放动作的任何实际结果(在我的生产应用程序和上面链接的示例页面中)。 Screenshot of drag and drop test results
当我在测试期间查看浏览器中发生的事情时,我注意到该对象变得可拖动(引用“拖我”在括号中添加)但测试代表了一个日志时间。移动鼠标光标时,测试继续上面提到的int PASS,但没有实际效果。
试用最新的Chrome,Firefox,IE。还尝试使用关键字鼠标按下,鼠标悬停,鼠标向上,但具有相同的结果。
以下是执行报告中的日志截图:Execution report screenshot
我将不胜感激任何帮助或解决方法,以正确完成它。
从[so]上的其他帖子来看,这个功能似乎不能很好地工作。因此,大多数答案都包含使用JavaScript创建解决方案的建议。我已经调整了这个SO answer中的示例来使用Robot Framework:
拖drop.js
var dataTransfer=
{
dropEffect:'',
effectAllowed:'all',
files:[],
items:{},
types:[],
setData:function(format,data)
{
this.items[format]=data;
this.types.append(format);
},
getData:function(format)
{
return this.items[format];
},
clearData:function(format){}
};
var emit=function(event,target)
{
var evt=document.createEvent('Event');
evt.initEvent(event,true,false);
evt.dataTransfer=dataTransfer;
target.dispatchEvent(evt);
};
var DragNDrop=function(src,tgt) {
src = document.getElementById(src);
tgt = document.getElementById(tgt);
emit('dragstart',src);
emit('dragenter',tgt);
emit('dragover',tgt);
emit('drop',tgt);
emit('dragend',src);
return true;
}
拖drop.robot
*** Settings ***
Library SeleniumLibrary
Library OperatingSystem
Suite Setup Open_Browser ${url} Chrome
Suite Teardown Close Browser
*** Variables ***
${URL} = https://html5demos.com/drag/
*** Test Cases ***
Make Test
${js} Get File drag-n-drop.js
${result} Execute Javascript ${js}; return DragNDrop("two", "bin");
Capture Page Screenshot
Sleep 1