51Testing软件测试论坛

标题: 【已解决】求助,请看看这个DIV层下的元素selenium-webdriver如何获取? [打印本页]

作者: vipwork    时间: 2012-10-10 10:44
标题: 【已解决】求助,请看看这个DIV层下的元素selenium-webdriver如何获取?
本帖最后由 vipwork 于 2012-10-11 16:54 编辑

请大家帮忙看看用什么定位器可以获取到红框内的<a>元素。这个是一个第三级菜单来的,请看图
[attach]81659[/attach]


[attach]81660[/attach]
作者: vipwork    时间: 2012-10-11 16:40
问题解决了。解决的方法如下:
  1. WebElement menu3 = driver.findElement(By.xpath("//a[@class='x-menu-item' and text()='流程']"));
  2.                 actions.moveToElement(menu3);
  3.                 actions.perform();
复制代码
当另一个问题又出现了,这个movetoelement方法非常不好用,貌似作用只是模拟鼠标滑过这个链接而已,并不能达到mouseover的效果,即鼠标停放在这个链接上的效果
作者: vipwork    时间: 2012-10-11 16:53
经过两天不懈的努力,终于找到方法了。看来还是api看得太少啊。用下面代码可以模拟鼠标停放在链接上的效果。
  1. WebElement menu1 = driver.findElement(By.xpath("//a[@class='white' and text()='一级菜单']"));
  2.                 //actions.moveToElement(menu1);
  3.                 actions.clickAndHold(menu1);
  4.                 actions.perform();       
  5.                 WebElement menu2 = driver.findElement(By.xpath("//a[text()='二级菜单']"));
  6.                 //actions.moveToElement(menu2);
  7.                 actions.clickAndHold(menu2);
  8.                 actions.perform();
  9.                 Thread.sleep(1000);
  10.                 driver.findElement(By.xpath("//a[@class='x-menu-item' and text()='三级菜单']")).findElement(By.xpath("..")).click();
  11.                 driver.findElement(By.xpath("//a[@class='x-menu-item' and text()='三级菜单']")).click();
  12.                
复制代码

作者: vipwork    时间: 2012-10-12 10:29
再次回来说明一下,3楼贴的解决方法是有缺陷的。不过这个是selenium2与IE的兼容性问题。简答来说,当使用InternetExplorerDriver时,使用上面方法时,鼠标指针不能放在浏览器内,否则,将造成最后一步:
  1. driver.findElement(By.xpath("//a[@class='x-menu-item' and text()='三级菜单']")).click();
复制代码
click第三级菜单抛异常:ElementIsNotVisibalException

具体可以参考下面贴中jim evans的回答:
https://groups.google.com/forum/ ... bdriver/WeuSwYemM4E

所以,在回放脚本使,鼠标指针最好停放在任务栏上,不过如果你不是用IE而是用FIREFOX的话,倒不用担心这个问题。其实说到底就是selenium2限制了fireeven的方法,实在是相当的不方便。另外,可以在selenium2中使用selenium1的方法:
  1. ISelenium selenium = new WebDriverBackedSelenium(driver, baseURL);
  2. selenium.Start();
  3. selenium.MouseOver(xpathA);
复制代码

作者: pcxty    时间: 2013-1-6 23:51
不错
作者: testingWJZ    时间: 2016-5-24 10:01
用select 啥
作者: testingWJZ    时间: 2016-5-24 10:06
Select select =new Select(driver.findElement(By.id("***")));
select.selectByVisibleText("流程");

你试试这种方式




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2