2016-09-11 21 views
10

Tôi đang cố kéo phần tử vào phần tử khác bằng Selenium WebDriver nhưng nó không hoạt động. Tôi đã thử tất cả các giải pháp mà tôi có thể tìm thấy trên internet nhưng không có giải pháp nào có vẻ hiệu quả đối với tôi.Tại sao kéo và thả không hoạt động trong Trình quản lý trang web Selenium?

WebElement sourceelement = driver.findElement(By.cssSelector("XXX")); 
WebElement destelement = driver.findElement(By.cssSelector("YYY")); 

Code1: -

Actions builder = new Actions(_controls.getDriver()); 
builder.dragAndDrop(sourceelement, destelement); 

code2: -

Actions builder = new Actions(_controls.getDriver()); 
Action dragAndDrop = 
builder.clickAndHold(sourceelement).moveToElement(destelement).release(destelement).build(); 
Thread.sleep(2000); 
dragAndDrop.perform() 

Code3: -

Point coordinates1 = sourceelement.getLocation(); 
Point coordinates2 = destelement.getLocation(); 
Robot robot = new Robot();   
robot.mouseMove(coordinates1.getX(), coordinates1.getY()); 
robot.mousePress(InputEvent.BUTTON1_MASK); 
robot.mouseMove(coordinates2.getX(), coordinates2.getY()); 
robot.mouseRelease(InputEvent.BUTTON1_MASK); 
Thread.sleep(2000); 

Code4: -

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)_controls.getDriver()).executeScript(java_script, sourceelement, destelement); 
     Thread.sleep(2000); 

Không có mã nào ở trên đang hoạt động đối với tôi. Tất cả các hoạt động trên không có bất kỳ lỗi nào nhưng việc kéo và thả không xảy ra trong ứng dụng. Bất cứ ai có bất kỳ giải pháp khác? Cảm ơn.

+1

Bạn đang thử tính năng này cho HTML5? – Grasshopper

+0

Bắt đầu với trong trang nguồn Xem. Vì vậy, có nó là trang html5. – Naseem

+2

Hãy xem xét điều này - http://stackoverflow.com/questions/29381233/how-to-simulate-html5-drag-and-drop-in-selenium-webdriver. Ai đó thậm chí đã tạo ra một github với mã java tương ứng. – Grasshopper

Trả lời

0

Trong mã của bạn 1: Không gọi thực hiện (phương pháp, ) nó phải được

Actions nhà xây dựng = Hành động mới (_controls.getDriver());

builder.dragAndDrop (nguồn cấp dữ liệu, destelement) .perform();

Trong mã của bạn 2: Tôi không nghĩ rằng bạn cần phải gọi phóng thích()

Hãy tìm kiếm similar question s trước khi đăng.

+0

Vui lòng cho chúng tôi biết nó hoạt động .. – FayazMd

+0

Sau khi thực hiện các thay đổi bắt buộc trong Mã 1 và Mã 2, nó vẫn không hoạt động.Ngoài ra tôi đã nghiên cứu rất nhiều về chức năng kéo và thả và đó là cách tôi đã có thể tìm thấy rất nhiều mã. Khi không ai trong số họ làm việc sau đó chỉ có tôi đăng câu hỏi của tôi. – Naseem

0

Bạn có thể muốn kiểm tra xem liệu tính năng webelement được bật hay hiển thị trước khi thực hiện hành động mong muốn trên đó. Bạn có thể cung cấp cho nó một thử với mã dưới đây

public void dragAndDrop(WebElement sourceElement, WebElement destinationElement) { 
    try { 
     if (sourceElement.isDisplayed() && destinationElement.isDisplayed()) { 
      Actions action = new Actions(driver); 
      action.dragAndDrop(sourceElement, destinationElement).build().perform(); 
     } else { 
      System.out.println("Element was not displayed to drag"); 
     } 
    } catch (StaleElementReferenceException e) { 
     System.out.println("Element with " + sourceElement + "or" + destinationElement + "is not attached to the page document " 
       + e.getStackTrace()); 
    } catch (NoSuchElementException e) { 
     System.out.println("Element " + sourceElement + "or" + destinationElement + " was not found in DOM "+ e.getStackTrace()); 
    } catch (Exception e) { 
     System.out.println("Error occurred while performing drag and drop operation "+ e.getStackTrace()); 
    } 
} 


public void dragAndDrop(WebElement sourceElement, WebElement destinationElement) 
    { 
     (new Actions(driver)).dragAndDrop(sourceElement, destinationElement).perform(); 
    } 
} 
+0

Cảm ơn Nandesh nhưng các yếu tố được bật. Đã thử với mã ở trên và nó chạy mà không có bất kỳ lỗi nào nhưng không kéo và thả – Naseem

+0

@Naseem bạn có muốn chia sẻ phiên bản của trình duyệt web Selenium, nguồn trang, trình duyệt không? Giả sử rằng webelement tương tác của bạn với hỗ trợ kéo và thả hành động. –

+0

Tôi đang sử dụng phiên bản Seleniun là 2.53.0 và trình duyệt là IE. Rất tiếc, sẽ không thể chia sẻ nguồn trang ở đây. – Naseem

0

tôi sẽ đề nghị bạn thử các giải pháp sau đây:

WebElement sourceelement = driver.findElement(By.cssSelector("XXX")); 
Locatable element = (Locatable)sourceelement ; 
Point p= element.getCoordinates().inViewPort(); 
int sourceX=p.getX(); 
int sourceY=p.getY(); 

WebElement destelement = driver.findElement(By.cssSelector("YYY")); 
Locatable elementTarget = (Locatable)destelement; 
Point Target= elementTarget.getCoordinates().inViewPort(); 
int targetX=Target.getX(); 
int targetY=Target.getY(); 

Sau đó, bạn có thể sử dụng Robot để kéo và thả các phần tử

0

tôi sẽ đề nghị bạn sử dụng Touch Action để thực hiện thao tác kéo và thả.

Point coordinates1 = sourceelement.getLocation(); 
Point coordinates2 = destelement.getLocation(); 
TouchActions builder = new TouchActions(driver); 
builder.longPress(coordinates1) 
     .move(coordinates2).release(coordinates2).perform(); 
0

Tôi có mặt vấn đề tương tự đường trở về, tôi đã sử dụng dragAndDropBy để di chuyển thanh trượt nhưng nó không làm việc cho tôi nhưng sau đó tôi tìm thấy sự giúp đỡ và dưới đoạn mã làm việc của tôi:

public static void slider(){ 
x=10; 
WebElement slider = driver.findElement(By.id("slider")); 
int width=slider.getSize().getWidth(); 
Actions move = new Actions(driver); 
move.moveToElement(slider, ((width*x)/100), 0).click(); 
move.build().perform(); 
System.out.println("Slider moved"); 
} 

Bạn có thể tham khảo liên kết here

Các vấn đề liên quan