簡體   English   中英

如何使用 Selenium 3.141.59 + Java 在 HTML5 元素上執行拖放

[英]How to perform drag and drop on HTML5 element using Selenium 3.141.59 + Java

我無法使用 Selenium 3.141.59 + java (1.8) 在 HTML5 元素上執行拖放操作。 我也嘗試過該組中提到的其他解決方案(通過 JavaScriptExecutor)。 但沒有任何解決方案有效。 你能幫我為我的問題提供一個具體的解決方案嗎?

我正在使用 Selenium(3.141.59) + Java (1.8) + Cucumber 框架 + Selenium 網格 (4)

我關注了討論,但它是針對 python 的,但我需要 Java 中的解決方案。

要在網站中執行dragAndDrop()作為示例,您需要為elementToBeClickable()引入WebDriverWait並且您可以使用以下定位器策略

  • 使用XPATH

     driver.get("http://www.dhtmlgoodies.com/scripts/drag-drop-custom/demo-drag-drop-3.html") WebElement drag = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[starts-with(@id, 'box') and text()='Rome']"))); WebElement drop = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[starts-with(@id, 'box') and text()='South Korea']"))); new Actions(driver).dragAndDrop(drag, drop).build().perform();

我遇到了與 selenium 4 相同的問題。我發現這個 javascript 對我有用。 我找不到討論的鏈接,但找到下面的代碼片段:

WebElement From = driver.findElement(By.xpath(Source_locator));
WebElement To = driver.findElement(By.xpath(Target_locator));;
    
    //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);
        

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM