RobotFramework:拖放Selenium2关键字似乎不起作用

问题描述 投票:5回答:1

我正在测试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

我将不胜感激任何帮助或解决方法,以正确完成它。

selenium-webdriver robotframework drag selenium2library
1个回答
3
投票

从[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
© www.soinside.com 2019 - 2024. All rights reserved.