动作类不适用于 selenium 3.5.3

Posted

技术标签:

【中文标题】动作类不适用于 selenium 3.5.3【英文标题】:Action class is not working with selenium 3.5.3 【发布时间】:2018-02-05 07:16:31 【问题描述】:

我想将元素从一个地方拖放到另一个地方。所以,我正在使用动作类来实现我的功能。

问题是我的代码执行成功,没有显示任何错误,但功能目标没有实现。

我在 firefox 和 chrome 浏览器中尝试了相同的代码,但在两个浏览器中都出现了同样的问题。

这里是网站url。

我尝试过的代码:

driver.get("http://www.seleniumeasy.com/test/drag-and-drop-demo.html");
driver.manage().window().maximize();

driver.findElement(By.xpath("//div[@id='todrag']//span[contains(text(), 'Draggable 1')]"));
driver.findElement(By.xpath("//div[@id='todrag']//span[contains(text(), 'Draggable 2')]"));
driver.findElement(By.xpath("//div[@id='todrag']//span[contains(text(), 'Draggable 3')]"));
driver.findElement(By.xpath("//div[@id='todrag']//span[contains(text(), 'Draggable 4')]"));

WebElement to = driver.findElement(By.xpath("//div[@class='w50 moveleft']//div[@id='mydropzone']"));
String[] array_drag = new String[] "Draggable 1", "Draggable 2", "Draggable 3", "Draggable 4";

for(int i=0; i<array_drag.length; i++)

    WebElement from = driver.findElement(By.xpath("//div[@id='todrag']//span[contains(text(), '"+array_drag[i]+"')]"));
    Actions act = new Actions(driver);
    act.clickAndHold(from).build().perform();
    Thread.sleep(2500);
    act.clickAndHold().moveToElement(to).release(to).build().perform();
    Thread.sleep(2500);         

我也尝试过这个答案,但复制了同样的问题。

Actions act = new Actions(driver);
act.moveToElement(from).moveToElement(to).build().perform();

你也可以看到下面的图片,代码执行成功,没有任何错误。

谁能帮我解决这个问题?

【问题讨论】:

是直接dragAndDrop in actions 不工作? @murali selenium,是的,它也不起作用。 该网站似乎没有按预期运行。我什至不能手动拖放。是网站的问题,而不是您的代码? 网站工作正常,通过手动我可以轻松地在两个浏览器中拖放 webelement。 (火狐和铬) 【参考方案1】:

我们也可以这样试试

Action dragAndDrop = builder.clickAndHold(src)
        .moveToElement(trg)
        .release(trg)
        .build();  
        dragAndDrop.perform();

【讨论】:

感谢您宝贵的时间@murali selenium,我已经尝试过您的代码,但复制了同样的问题。【参考方案2】:
                    Actions builder=new Actions(driver);
                    builder.clickAndHold(weDragFrom).build().perform();
                    Thread.sleep(5000);
                    builder.click(weDragTo).build().perform();
                    builder.release(weDragTo).build().perform();

` 不幸的是,这对我来说仅适用于 chrome,但不适用于 Firefox 或 IE11。我仍在寻找解决方案来完成这项工作。正如你所说的那样尝试了一切代码运行没有任何错误,也没有任何事情

【讨论】:

感谢您的回答,我已经尝试了您的代码,但对我来说,它在上述任何浏览器中都不起作用。 (Chrome、Firefox、IE11)

以上是关于动作类不适用于 selenium 3.5.3的主要内容,如果未能解决你的问题,请参考以下文章

Firefox Build 不适用于 Selenium

Selenium C#FirefoxDriver不适用于最新的Selenium和Firefox

Selenium 2.53 不适用于 Firefox 28

Selenium 2.53 不适用于 Firefox 47

单击不适用于 Selenium 的元素

为啥 If 语句不适用于 selenium 中的 for 循环