[Webdriver]实现鼠标拖拽功能的问题
页面链接:http://www.w3school.com.cn/tiy/t.asp?f=html5_draganddrop实现代码如下:
driver.get(baseUrl);
driver.switchTo().frame("i");
WebElement drag1 = driver.findElement(By.xpath(".//*[@id='drag1']"));
WebElement drag2 = driver.findElement(By.xpath(".//*[@id='div1']"));
action.dragAndDrop(drag1, drag2).build().perform();
action.release();
Thread.sleep(1000);
System.out.println(driver.findElement(By.cssSelector("div img")).getAttribute("src")+"---------------------------");// 这一步报错
在最后一步,验证的过程中出错(另外,从页面来看的话,也没有看到有拖拽的效果)。请了解的同学帮忙指导一下,3 Q
本帖最后由 joykao 于 2015-10-20 15:05 编辑
请问最后一步报错的信息是什么呢?元素没找到?你拖完以后再去定位是定位不到的,那个页面是用到iframe了你默然加载的那个frame不是右边的那个你需要先switch frame到右边的frame才能定位到元素
@Test
public void testDragDrop() {
driver.get
("http://www.w3school.com.cn/tiy/t.asp?f=html5_draganddrop");//这个地方要加上switchtoframe方法,定义元素有id就用id,xpath和cssSelector要在足够了解后再用哦
WebElement source = driver.findElement(By.id("drag1"));
WebElement target = driver.findElement(By.id("div1"));
Actions builder = new Actions(driver);
builder.dragAndDrop(source, target).perform();
}
joykao 发表于 2015-10-20 14:58
请问最后一步报错的信息是什么呢?元素没找到?你拖完以后再去定位是定位不到的,那个页面是用到iframe了你 ...
报错信息如下:
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"css selector","selector":"div img"}
因为在selenium操作页面的过程中,我这里看不到效果。所以添加了最后一个system.out.println
让selenium自己执行的话,最后就会报上面的错,如果在执行的等待过程中,我手动拖拽的话,程序就会正常执行通过,并输出src的属性。
另外,打扰一下,您那边可以正常执行吗?
我依赖的包为:
selenium-server-standalone-2.46.0.jar firefox版本为:41.0.2 a787373009 发表于 2015-10-20 15:07
报错信息如下:
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: { ...
代码是没问题的,根本原因就是真的没有拖拽成功,所以你最后的元素属性根本就不是div img 所以报找不到元素,有可能有webdriver版本更新导致之前的有些类库不好用了哦:Q joykao 发表于 2015-10-20 16:20
代码是没问题的,根本原因就是真的没有拖拽成功,所以你最后的元素属性根本就不是div img 所以报找不到元 ...
恩恩 。 非常感谢 我用的是python 使用的是JS來進行拖動
js= "varq=document.documentElement.scrollTop=10000"
driver.execute_script(js) #引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
#定位元素的原位置
element=driver.find_element_by_name("xxx")
#定位元素要移动到的目标位置
target=driver.find_element_by_name("xxx")
#执行元素的移动操作
ActionChains(driver).drag_and_drop(element,target).perform()
页:
[1]