2017-02-14 3 views
1

Ich versuche, Drag and Drop in Selen zu implementieren. Dies ist ein neues Szenario, das ich gefunden habe, die Drop-Position ist nicht sichtbar, bis ich die Quelle auf den Ablageort verschiebe und sie halte. Es sieht etwa so aus: enter image description hereSelen Drag and Drop auf unsichtbare Position

ich einige Dinge ausprobiert wie

Szenario 1:

Actions builder = new Actions(driver); 
builder.clickAndHold(curSourceElement).build().perform(); 
builder.moveToElement(curTargetElement).build().perform(); 
builder.release(curTargetElement).build().perform();  

Szenario 2:

builder.clickAndHold(curSourceElement).build().perform(); 
builder.moveToElement(curTargetElement).clickAndHold(curTargetElement).moveByOffset(0,500).release(curTargetElement).build().perform(); 

und viele andere Möglichkeiten, durch Bewegung zu Drop Location und durch Hinzufügen von Wartezeiten, aber keiner von ihnen scheint zu arbeiten.

Gibt es eine andere Möglichkeit, Drag & Drop durchzuführen, wenn der Ablageort nicht sichtbar ist.

Jede Hilfe würde wirklich geschätzt werden.

Danke.

Antwort

0

Mein erster Versuch würde wie folgt aussehen:

Size currentWinSize = driver.Manage().Window.Size; 
driver.Manage().Window.Maximize(); //Remove window size as a concern 

Actions builder = new Actions(driver); 
builder.clickAndHold(curSourceElement); 
builder.moveToElement(curTargetElement).Build().Perform(); 
sleepResponsibly(2000); //Give handler time to react. After working replace 
         // sleep with wait on ExpectedConditions 
builder.release(curTargetElement).build().perform(); 
driver.Manage().Window.Size = currentWinSize; // Put window size back 

public void sleepResponsibly(int timeMillisecond){ 
    try{ 
     Thread.sleep(timeMillisecond); 
    } catch (InterruptedException ex) { 
     Thread.currentThread().interrupt(); 
     throw new RuntimeException(ex); 
    } 
} 

BTW, ich laufe alle meine Tests mit Window.Maximize(), aber enthalten den Schritt, falls Sie dies nicht tun. Wenn der Hover-Ereignishandler ein neues Element aufruft, das als Ziel fungiert, müssen Sie darauf warten, dass dieses neue Element klickbar ist, und dann auf dem neuen Ziel freigeben. Nur Sie wissen, wie Ihr Code entworfen wurde.