我使用下面的拖放代码将图片拖入照片场。这在InternetExplorer中工作正常,但在Firefox或Chrome中不起作用。 我不明白为什么不。
正如您在下面的代码中看到的,我尝试了很多不同的方法来执行拖放操作,但它们都不起作用。 主要问题是在释放图像后目标未更新。 我看到掉落发生但没有更新。
有谁知道为什么会这样?我正在使用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..");
}
答案 0 :(得分:6)
这就是我现在在FireFox中使用它的方法。 Chrome仍然失败。 唯一的区别是我在MoveToElement方法中添加了偏移量,如The Rookies评论中所示。
var builder = new Actions(driver);
builder.ClickAndHold(dragElement);
builder.MoveToElement(dropElement, 5, 5);
builder.Perform();
Thread.Sleep(250);
builder.Release(dropElement);
builder.Perform();
答案 1 :(得分:2)
尝试下面的示例代码使用chromedriver:2.15,chrome: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();
答案 2 :(得分:0)
对于firefox,您可以使用以下内容,但它位于ruby
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
希望有所帮助
答案 3 :(得分:0)
ChromeDriver尚不支持“动作”命令。 Java 语言绑定将Actions请求转换为相应的 鼠标事件发送到ChromeDriver之前,但没有 保证翻译的鼠标事件完全等同于 原始行动请求。