2017-09-18 48 views
0

我正在嘗試使用Selenium和Java進行拖放操作,它不工作..可能是什麼原因..它不會給我錯誤,但它只是沒有發生..使用Selenium WebDriver與Java進行拖放無法在iFrame中工作

這是我的代碼。

public class ActionDragDrop { 

    public static void main(String[] args) throws InterruptedException { 

     WebDriver driver = new ChromeDriver(); 
     driver.get("https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_draganddrop"); 
     driver.manage().window().maximize(); 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
     WebElement f=driver.findElement(By.xpath("//*[@id='iframeResult']")); 
     driver.switchTo().frame(f); 

     WebElement drag = driver.findElement(By.xpath("//*[@id='drag1']")); 
     WebElement drop = driver.findElement(By.xpath("//*[@id='div1']")); 

     Actions builder = new Actions(driver); 
     Actions dragAndDrop = builder.clickAndHold(drag); 
     builder.moveToElement(drop); 
     builder.release(drop); 
     builder.build(); 
     dragAndDrop.perform(); 
    } 
} 
+0

內切換什麼是錯誤,U缺少的setProperty – iamsankalp89

+0

它工作正常使用Chrome,唯一的事情是不會發生的拖放。它不會給我任何錯誤。 – mashkurm

+0

所以這是合乎邏輯的問題 – iamsankalp89

回答

0

你將要更換到iframe中,以執行拖放事件:

driver.switchTo().frame(0);      //Move inside to the frame. 
WebElement body = driver.findElement(By.tagName("body")); 
body.click(); 
WebElement from = driver.findElement(By.xpath("//your xpath")); 
Actions act = new Actions(driver); 
act.clickAndHold(from).build().perform(); 
Thread.sleep(4000); 
driver.switchTo().defaultContent();    //Move outside to the frame. 

driver.switchTo().frame(1);      //Move inside to another frame. 
WebElement body = driver.findElement(By.tagName("body")); 
body.click(); 
WebElement to = driver.findElement(By.id("guide_RIGHT_SAFETY_rect")); 
act.clickAndHold(to).moveToElement(to).release(to).build().perform(); 
Thread.sleep(2000); 
driver.switchTo().defaultContent();    //Move outside to another frame. 

注:請用你的XPath,ID,類名等等,我剛纔複製的例子。或多或少的想法應該是一樣的。

+0

我做了相同的使用此代碼--- WebElement f = driver.findElement(By.xpath(「// * [@ id ='iframeResult']」)); driver.switchTo().frame(f); – mashkurm

+0

你可以分享你想要達到的頁面的POM嗎? –

+0

我只是用main方法運行簡單的java程序。任何框架和Maven都不附於此。 – mashkurm

0

試試下面的代碼。

由於您的fromto webelement位於相同iframe內。首先,你需要的iframe.

driver.get("https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_draganddrop"); 
driver.manage().window().maximize(); 

driver.switchTo().frame("iframeResult"); //Move inside to the frame. 
WebElement body = driver.findElement(By.tagName("body")); 
body.click(); 
WebElement from = driver.findElement(By.xpath("//img[@id='drag1']")); 
WebElement to = driver.findElement(By.xpath("//div[@id='div1']")); 

Actions act = new Actions(driver); 
act.clickAndHold(from).perform(); 
Thread.sleep(4000); 
act.clickAndHold().moveToElement(to).release(to).build().perform(); 
Thread.sleep(2000); 
driver.switchTo().defaultContent(); //Move outside to the frame. 
+0

它不工作。我試過了 – iamsankalp89

+0

其實問題是代碼執行成功,沒有顯示任何錯誤。請查看我的代碼,看看是否顯示任何錯誤。我猜動作類沒有更多的工作最新的硒'3.5.3' –

+0

你也可以檢查我的這個問題。參考這個問題了解更多細節。 https://stackoverflow.com/questions/45911879/action-class-is-not-working-with-selenium-3-5-3 –

相關問題