NoSuchElementException:没有这样的元素:无法定位元素:同时识别draggable和droppable元素

时间:2018-04-03 08:34:36

标签: selenium selenium-webdriver drag-and-drop webdriver draggable

我实际上是硒的新手。我正在尝试在演示网站上进行拖放操作:http://jqueryui.com/droppable/(这里转到演示 - > Droppable)。

以下是我的html来源:

<div id="draggable" class="ui-widget-content ui-draggable ui-draggable-handle" style="position: relative;">
    <p>Drag me to my target</p>
</div>

以下是我的代码块:

WebElement drag=dr.findElement(By.xpath("//*[@id='draggable']"));
wait.until(ExpectedConditions.elementToBeClickable(drag));

WebElement drop=dr.findElement(By.xpath("//*[@id='droppable']"));

wait.until(ExpectedConditions.elementToBeClickable(drop));
//act.moveToElement(drop).build().perform();
act.dragAndDrop(drag, drop).build().perform();

2 个答案:

答案 0 :(得分:0)

问题在于拖拽和drop元素位于iframe中。您需要使用class='demo-frame'

切换到iframe

切换到iframe后,您就可以找到并与您的元素进行互动。

答案 1 :(得分:0)

拖动的元素和 drop 的元素都在<iframe>之内。所以你必须先切换到预期的框架,然后找到 draggable droppable 元素并执行 dragAndDrop()如下:

以下是完整的代码段:

System.setProperty("webdriver.gecko.driver", "C:\\path\\to\\geckodriver.exe");
WebDriver driver=new FirefoxDriver();
driver.get("http://jqueryui.com/droppable/");
driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@class='demo-frame']")));
WebElement  from = driver.findElement(By.id("draggable"));
WebElement  to = driver.findElement(By.id("droppable"));
new Actions(driver).dragAndDrop(from, to).build().perform();
System.out.println("Drag and Drop Completed");
driver.quit();