特殊元素定位和操作(四)
--------------------------------------鼠标键盘事件:-----------------------
自动化测试时,有些元素不适合直接点击或者进行某些操作时,可以使用Selenium的Actions类来模拟鼠标键盘操作,通过Actions对象可以发起鼠标左键,右键,移动鼠标等操作,最后使用perform方法执行操作。
案例:百度首页
Actions: 在操作一个页面元素的时候需要一连串的动作配合的时候,可以使用Actions来完成
案例:http://www.treejs.cn/v3/demo/cn/exedit/drag.html
要移动一个二级菜单的位置,这个动作涉及到的几个动作:选择菜单->点击左键不松开->移动到某个地方->释放鼠标 组合这一套动作:
actions.clickAndHold(onElement).moveToElement(toElement).release().build().perform();
注意:并不是所有的操作都适合用Actions鼠键操作来完成,有些情况下使用一套鼠键操作反而会复杂化一个普通操作
常用Api:
//new 一个执行鼠标事件的实例化对象
Actions actions=new Actions(driver);
//将元素拖拽到某个元素的位置:source:源 元素 target:目标元素位置
actions.dragAndDrop(source, target)
//鼠标双击
actions.doubleClick();
//鼠标右击
actions.contextClick();
//将鼠标移动到指定的元素上
actions.moveToElement(target);
示例演示:
openBrowser("chrome");
driver.get("http://www.treejs.cn/v3/demo/cn/exedit/drag.html");
// 刷新当前打开的浏览器页面
driver.navigate().refresh();
// new 一个执行鼠标事件的实例化对象
Actions actions = new Actions(driver);
// 找到要拖拽的元素--源
WebElement element = driver.findElement(By.id("treeDemo_2_span"));
// 找到要推拽到哪里的元素
WebElement findElement = driver.findElement(By.id("treeDemo_3_span"));
// 鼠标长按将 element 拖拽到findElement位置 ,然后释放鼠标
// release()释放鼠标
// build()构建一连串的动作
// perform()使一连串的动作生效
actions.clickAndHold(element).moveToElement(findElement).release().build().perform();
------------------------------文件上传---------------------------------------
文件上传是自动化中比较麻烦的部分
第一种情况:
<input type="file" id="fu" value="选择文件">
因为上传文件会需要打开windows的文件选择窗口,而selenium
是无法操作这个窗口的
解决办法: 使用sendKeys写入文件的路径
第二种情况:
如果文件上传不是input元素,而是使用的第三方的控件。需要使用第三方的
工具,比如autoit等来完成
openBrowser("chrome");
driver.get("G:\\xxxx\\xxx\\xxx\\xxxx\\xxxx\\xxxx\\xxxx\\fileupload.html");
driver.findElement(By.id("fu")).sendKeys("C:\\Users\\TF\\Desktop\\新建文本文档.txt");
---------------------------------验证码-------------------------
(1)去除 验证码
(2)自动识别----通过第三方工具进行图像识别,比如打码平台
不推荐----需要学习很多知识
(3)使用万能验证码----开发提供
前程贷万能验证码:hapi
前程贷后台地址:http://120.78.128.25:8765/Admin/Index/login.html
lemon7/lemonbest
前程贷前台地址:http://120.78.128.25:8765/Index/login.html
13323234545/lemon123456
示例:
openBrowser("chrome");
driver.get("http://120.78.128.25:8765/Admin/Index/login.html");
driver.findElement(By.xpath("//input[@name=\"admin_name\"]")).sendKeys("lemon7");
driver.findElement(By.xpath("//input[@name=\"admin_pwd\"]")).sendKeys("lemonbest");
driver.findElement(By.xpath("//input[@name=\"code\"]")).sendKeys("hapi");
driver.findElement(By.xpath("//button[text()=\"登陆后台\"]")).click();