拖放不使用java中的chrome webdriver

拖放不使用java中的chrome webdriver,java,selenium,selenium-webdriver,css-selectors,selenium-chromedriver,Java,Selenium,Selenium Webdriver,Css Selectors,Selenium Chromedriver,在这里输入图像描述我有以下代码用于将项目从一个位置拖放到另一个位置 By sourceLocatorDragAndDrop = By.cssSelector("#available_objects_parent tbody tr td:eq(4)"); By destinationLocatorDragAndDrop = By.cssSelector("#assigned_objects_parent table tbody"); Actions action = new Actions(w

在这里输入图像描述我有以下代码用于将项目从一个位置拖放到另一个位置

By sourceLocatorDragAndDrop = By.cssSelector("#available_objects_parent tbody tr td:eq(4)");

By destinationLocatorDragAndDrop = By.cssSelector("#assigned_objects_parent table tbody");

Actions action = new Actions(webDriver);   

action.dragAndDrop(webDriver.findElement(sourceLocatorDragAndDrop) ,webDriver.findElement(destinationLocatorDragAndDrop)).build().perform();
此代码给出以下错误:

org.openqa.selenium.InvalidSelectorException:无效选择器:一个 指定的选择器无效或非法(会话信息: chrome=74.0.3729.131)(驾驶员信息:chromedriver=2.46.628402 (536cd7adbad73a3783fdc2cab92ab2ba7ec361e1),平台=Windows NT 10.0.17134 x86_64)(警告:服务器未提供任何堆栈跟踪信息)


有人能告诉我如何解决这个问题吗?

看来您使用了错误的CSS选择器。您始终可以在chrome开发者选项中验证xpath。请通过下面的链接。请提供sourceLocatorDragAndDrop和destinationLocatorDragAndDrop的html代码,以便我们了解出错的原因


您似乎使用了错误的CSS选择器。您始终可以在chrome开发者选项中验证xpath。请通过下面的链接。请提供sourceLocatorDragAndDrop和destinationLocatorDragAndDrop的html代码,以便我们了解出错的原因

:eq()
是一个JQuery选择器,而不是
cssselector
。硒不认识它。最接近的匹配是
:n-child()

:eq()
是JQuery选择器,而不是
cssselector
。硒不认识它。最接近的匹配是
:n-child()


您还可以使用JavaScript:-

因为在HTML5中,Action draganddrop函数不起作用,所以我使用javascript,它对我来说工作正常:-

    WebElement From = driver.findElement(By.id("sourceImage"));
    WebElement To = driver.findElement(By.id("targetDiv"));

    //HTML 5 
    final String java_script =
            "var src=arguments[0],tgt=arguments[1];var dataTransfer={dropEffe" +
            "ct:'',effectAllowed:'all',files:[],items:{},types:[],setData:fun" +
            "ction(format,data){this.items[format]=data;this.types.append(for" +
            "mat);},getData:function(format){return this.items[format];},clea" +
            "rData:function(format){}};var emit=function(event,target){var ev" +
            "t=document.createEvent('Event');evt.initEvent(event,true,false);" +
            "evt.dataTransfer=dataTransfer;target.dispatchEvent(evt);};emit('" +
            "dragstart',src);emit('dragenter',tgt);emit('dragover',tgt);emit(" +
            "'drop',tgt);emit('dragend',src);";

    ((JavascriptExecutor)driver).executeScript(java_script, From, To);
使用
操作
代码如下:-

WebElement From = driver.findElement(By.id("sourceImage"));
WebElement To = driver.findElement(By.id("targetDiv"));

Actions builder = new Actions(driver);
Action dragAnddrop = builder.clickAndHold(From)
                        .moveToElement(To)
                        .release(To)
                        .build();
dragAnddrop.perform();
使用FirefoxIDE查找xpath。
有关更多信息,请访问链接。

您也可以使用JavaScript:-

因为在HTML5中,Action draganddrop函数不起作用,所以我使用javascript,它对我来说工作正常:-

    WebElement From = driver.findElement(By.id("sourceImage"));
    WebElement To = driver.findElement(By.id("targetDiv"));

    //HTML 5 
    final String java_script =
            "var src=arguments[0],tgt=arguments[1];var dataTransfer={dropEffe" +
            "ct:'',effectAllowed:'all',files:[],items:{},types:[],setData:fun" +
            "ction(format,data){this.items[format]=data;this.types.append(for" +
            "mat);},getData:function(format){return this.items[format];},clea" +
            "rData:function(format){}};var emit=function(event,target){var ev" +
            "t=document.createEvent('Event');evt.initEvent(event,true,false);" +
            "evt.dataTransfer=dataTransfer;target.dispatchEvent(evt);};emit('" +
            "dragstart',src);emit('dragenter',tgt);emit('dragover',tgt);emit(" +
            "'drop',tgt);emit('dragend',src);";

    ((JavascriptExecutor)driver).executeScript(java_script, From, To);
使用
操作
代码如下:-

WebElement From = driver.findElement(By.id("sourceImage"));
WebElement To = driver.findElement(By.id("targetDiv"));

Actions builder = new Actions(driver);
Action dragAnddrop = builder.clickAndHold(From)
                        .moveToElement(To)
                        .release(To)
                        .build();
dragAnddrop.perform();
使用FirefoxIDE查找xpath。
有关更多信息,请浏览链接。

我还尝试了不同的选项。 最终这一次成功了。 动作动作=新动作(驱动); actions.clickAndHold().moveByOffset(01100.moveToElement(,01100.release().build().perform(); 睡眠(3000)


添加了睡眠,以便在开始进一步操作之前等待元素被拖动。

我还尝试了不同的选项。 最终这一次成功了。 动作动作=新动作(驱动); actions.clickAndHold().moveByOffset(01100.moveToElement(,01100.release().build().perform(); 睡眠(3000)


在开始进一步操作之前,添加了等待拖动元素的休眠。

您可以共享HTML代码吗?如果这是弹出窗口或对话框,请使用Thread.sleep(毫秒);对于小时间,弹出窗口或对话框需要时间来呈现,这意味着对于从浏览器id复制的xpath无效,一旦您的对话框或弹出窗口呈现代码将正常工作,您可以共享HTML代码吗?如果这是弹出窗口或对话框,请使用Thread.sleep(毫秒);对于小时间,弹出窗口或对话框需要时间来呈现,这意味着对于xpath,您从浏览器id复制无效,一旦您的对话框或弹出窗口呈现您的代码将正常工作,这应该更多的是一个注释。很抱歉,我没有评论的特权,因为我是一个新的贡献者。所以我建议验证cssselector。这应该更多的是一个评论。很抱歉,我没有评论的特权,因为我是一个新的贡献者。所以我建议验证cssselector。对于第二个代码段,我得到了下面的错误,它与操作有关。有没有线索说明为什么会发生这种情况。。org.openqa.selenium.WebDriverException:未知错误:元素在点(4729041)处不可单击,因为元素在单击之前不可见,或者页面在单击元素之前正在刷新,或者元素可单击,但其顶部有一个微调器/覆盖。。。浏览这个链接这很好-我使用的是使用JavaScriptExecutor的javascript解决方案。我在C#中使用Selenium,而不是Java,但基本相同。不过有一个更正-在JS中,this.types.append实际上应该是this.types.push(因为this.types在JS中是一个数组,所以应该使用push),我得到了第二个代码段的以下错误,该代码段与操作有关。有没有线索说明为什么会发生这种情况。。org.openqa.selenium.WebDriverException:未知错误:元素在点(4729041)处不可单击,因为元素在单击之前不可见,或者页面在单击元素之前正在刷新,或者元素可单击,但其顶部有一个微调器/覆盖。。。浏览这个链接这很好-我使用的是使用JavaScriptExecutor的javascript解决方案。我在C#中使用Selenium,而不是Java,但基本相同。不过有一个更正-在JS中,this.types.append实际上应该是this.types.push(因为this.types是JS中的一个数组,所以应该使用push)