2014-01-21 63 views
3

我使用下面的拖放代碼將圖片拖入照片場。這在InternetExplorer中運行正常,但在Firefox或Chrome中不起作用。 我不明白爲什麼不。Selenium在Chrome或Firefox中拖放不起作用

正如你在下面的代碼中看到的,我嘗試了很多不同的方式來進行拖放操作,但是它們都不起作用。 主要問題是釋放圖像後目標未更新。 我看到下降發生,但沒有更新。

有沒有人有任何想法,爲什麼這是?我使用C#和最新的Selenium驅動程序2.39,Chrome驅動程序2.8。

public static void DoDragAndDrop(IWebDriver driver, string dragImageId, string dropFieldId) 
    { 
     Console.WriteLine("Drag and drop image '{0}' to the editor {1}..", dragImageId, dropFieldId); 
     IWebElement dragElement = WebDriverExtensions.TryFindElement(By.Id(dragImageId)); 
     IWebElement dropElement = WebDriverExtensions.TryFindElement(By.Id(dropFieldId)); 

     if(dragElement == null) 
      Console.WriteLine("dragElement is null"); 
     if(dropElement == null) 
      Console.WriteLine("dropElement is null"); 

     ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView();", dragElement); 
     Thread.Sleep(500); 

     ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView();", dropElement); 
     Thread.Sleep(200); 

     Console.WriteLine("Drag and drop 1"); 
     var builder1 = new Actions(driver); 
     builder1.MoveToElement(dragElement).ClickAndHold(); 
     builder1.MoveToElement(dropElement).Build().Perform(); 
     Thread.Sleep(2000); 

     Console.WriteLine("Drag and drop 2"); 
     var builder2 = new Actions(driver); 
     builder2.DragAndDrop(dragElement, dropElement); 
     Thread.Sleep(2000); 

     Console.WriteLine("Drag and drop 3"); 
     var builder3 = new Actions(driver); 
     builder3.DragAndDrop(dragElement, dropElement).Build().Perform(); 
     IAction dragAndDrop = builder3.ClickAndHold(dragElement) 
      .MoveToElement(dropElement) 
      .Release(dropElement) 
      .Build(); 
     dragAndDrop.Perform(); 
     Thread.Sleep(2000); 


     Thread.Sleep(1000); 
     Console.WriteLine("Drag and drop succeeded.."); 
    } 

回答

6

這是怎麼了,我得到了它在Firefox的工作現在。 Chrome仍然失敗。 唯一的區別是我在MoveToElement方法中添加了偏移量,如Rookies評論所示。

var builder = new Actions(driver); 
     builder.ClickAndHold(dragElement); 
     builder.MoveToElement(dropElement, 5, 5); 
     builder.Perform(); 
     Thread.Sleep(250); 
     builder.Release(dropElement); 
     builder.Perform(); 
+0

這個固定爲我在Chrome v55.0.2。出於某種原因,元素現在消失,但至少會拖拽元素。 – KthProg

+1

一旦我從builder.release()中刪除元素,一切都很完美。 – KthProg

0

對於Firefox,你可以使用下面的卻是紅寶石

panel = driver.find_element(:id, ' (panel around the picture)') 
    target = panel.find_element(:xpath, ' ') 
    source = panel.find_element(:xpath, ' ') 
    driver.action.click_and_hold(source).move_to(target, 400, 150).release(target).perform 

希望它可以幫助

2

試用下面的示例代碼與chromedriver:2.15,鉻:V43和正常工作正常。

示例代碼:

System.setProperty("webdriver.chrome.driver","drivers/chromedriver.exe"); 
    WebDriver driver = new ChromeDriver(); 
    driver.manage().timeouts().implicitlyWait(1,TimeUnit.MINUTES); 
    driver.get("http://jqueryui.com/droppable"); 

    driver.switchTo().frame(0); 
    WebElement dragElement = driver.findElement(By.id("draggable")); 
    WebElement dropElement = driver.findElement(By.id("droppable")); 
    Actions builder = new Actions(driver); 
    builder.clickAndHold(dragElement).moveToElement(dropElement).release().build().perform(); 
0

ChromeDriver尚不支持的操作命令。 Java 語言綁定將Actions請求轉換爲對應的 鼠標事件,然後將它們發送給ChromeDriver,但沒有 保證翻譯後的鼠標事件完全等同於原始Actions請求的 。

來源:Chromium bugtacker

相關問題