当前位置: 首页 > 知识库问答 >
问题:

Selenium拖放不适用于Action方法,是否有任何替代

米迪
2023-03-14

>

  • 拖放Selenium

    WebElement source = driver.findElement(By.cssSelector(locator1));
    WebElement target = driver.findElement(By.cssSelector(locator2));
    Actions act = new Actions(driver);
    

    (选项1)

         act.moveToElement(source) .pause(Duration.ofSeconds(1)) .clickAndHold(source)
          .pause(Duration.ofSeconds(1)) .moveByOffset(1, 0) .moveToElement(target)
         .moveByOffset(1, 0) .pause(Duration.ofSeconds(1)) .release().perform();
          System.out.println();
    

    选项2

    行为单击并按住(源)。暂停(2000年)。移动到元素(目标)。释放()。build()。执行();

    我尝试过这两种选择,我正在开发Selenium 3,有没有其他方法可以实现它。

    注:不建议使用机器人类

  • 共有1个答案

    翁钧
    2023-03-14

    这是使用操作的拖放功能

    public void dragAndDrop(WebElement from, WebElement to) {
            Actions action = new Actions(driver);
            action.dragAndDrop(from,to).perform();
        }
    

    这是使用JSExector:

    public void dragAndDrop(WebElement from, WebElement to) {
            JavascriptExecutor js = (JavascriptExecutor)driver;
            js.executeScript("function createEvent(typeOfEvent) {\n" + "var event =document.createEvent(\"CustomEvent\");\n"
                            + "event.initCustomEvent(typeOfEvent,true, true, null);\n" + "event.dataTransfer = {\n" + "data: {},\n"
                            + "setData: function (key, value) {\n" + "this.data[key] = value;\n" + "},\n"
                            + "getData: function (key) {\n" + "return this.data[key];\n" + "}\n" + "};\n" + "return event;\n"
                            + "}\n" + "\n" + "function dispatchEvent(element, event,transferData) {\n"
                            + "if (transferData !== undefined) {\n" + "event.dataTransfer = transferData;\n" + "}\n"
                            + "if (element.dispatchEvent) {\n" + "element.dispatchEvent(event);\n"
                            + "} else if (element.fireEvent) {\n" + "element.fireEvent(\"on\" + event.type, event);\n" + "}\n"
                            + "}\n" + "\n" + "function simulateHTML5DragAndDrop(element, destination) {\n"
                            + "var dragStartEvent =createEvent('dragstart');\n" + "dispatchEvent(element, dragStartEvent);\n"
                            + "var dropEvent = createEvent('drop');\n"
                            + "dispatchEvent(destination, dropEvent,dragStartEvent.dataTransfer);\n"
                            + "var dragEndEvent = createEvent('dragend');\n"
                            + "dispatchEvent(element, dragEndEvent,dropEvent.dataTransfer);\n" + "}\n" + "\n"
                            + "var source = arguments[0];\n" + "var destination = arguments[1];\n"
                            + "simulateHTML5DragAndDrop(source,destination);", from, to);
        }
        
    

    更新:

            WebElement a = driver.findElement(By.cssSelector("a:nth-child(1)"));
            WebElement b = driver.findElement(By.cssSelector("a:nth-child(2)"));
    
            int x = b.getLocation().x;
            int y = b.getLocation().y;
    
            Actions actions = new Actions(driver);
            actions.moveToElement(a)
                    .pause(Duration.ofSeconds(1))
                    .clickAndHold(a)
                    .pause(Duration.ofSeconds(1))
                    .moveByOffset(x, y)
                    .moveToElement(b)
                    .moveByOffset(x,y)
                    .pause(Duration.ofSeconds(1))
                    .release().build().perform();
    
     类似资料:
    • 拖放操作不适用于selenium 3.8。 下面是该元素的JS代码 这就是我尝试过的。但这只是选择元素。保持和放弃是不会发生的。 我也试过这个。 也尝试过机器人。每次我只能看到源元素和目标元素都被选中。但不是被拖拽掉的。 还尝试了dragAndDrop ActionsChain。那也没用。

    • 我试图使用HTML5拖放在我的网站。dragstart和dragend被解雇,但dragenter,draglet,dragover和下降不工作,直到我刷新页面。 侧边栏中树中的节点应该能够拖动到表中的单元格。树是用jsTree制作的。我已经在火狐、Chrome和IE上尝试过了。他们都有相同的行为。 边栏树(rhtml文件) 删除操作代码(咖啡脚本文件) 表(页面来源) 我试着拉小提琴,但效果很好

    • 我正在使用Selenium和Java自动化拖放。以下是在无头模式下使用chrome驱动程序执行拖放的代码。 在无头chrome驱动程序中执行时不会发生任何情况。但是,在非无头chrome驱动程序中,这可以正常工作并执行拖放。 注意-同时使用dragAndDropBy(源、目标)和dragAndDropBy(源、xOffset、yOffset)进行了尝试。这两种方法在非无头chrome中也不起作用

    • 在安装了最新浏览器的情况下使用Selenium w/Java绑定和ChromeDriver 2.3 在花了足够多的时间试图找到一个解决方案后,我现在被难倒了。我正在尝试将一个元素拖放到另一个元素。唯一需要注意的是,我需要移动到的元素目标只有在移动源元素后才可见。有什么建议吗? 因此,这里是我点击并按住的源元素的屏幕截图,然后拖动它,我也可以删除两个选项: 元素是源 因此,当我按住鼠标并拖动一小部分

    • 在最新版本的chrome 91上,使用Selenium Action类或java脚本拖放元素不起作用。我尝试了所有可能的情况,例如使用以下方法 Javascript方法进行拖放 Java脚本方法1 Java脚本方法2: 使用jQuery方法。JQuery 使用机器人类。 使用Selenium Touch动作。 但没有一个解决方案对我有效。拖放是在之前的chrome版本89上进行的。 在此输入图像描

    • 问题内容: 我是Android开发领域的新手,我已经下载并安装了Android SDK,但找不到任何GUI或Form设计器,可以有人知道Android中的某些Form设计器吗,谢谢。 问题答案: 如d。正确提到的内置设计器并不能真正代表您的观点。而且,如果我们牢记即使经过4年的尝试,Microsoft对其XAML代码的等效性仍未达到最低使用水平,所以我强烈建议您手动进行操作。它更快,更困难但同样有