在ui自动化时,有些特殊情况需要用到js操作,在进行js操作前要先进行js元素定位。
一.js元素定位
1.id定位
document.getElementById("id")
2.name定位
document.getElementsByName("name")
3.class定位
document.getElementsByClassName("class")
4.tag定位
document.getElementsByTagName("tag")
5.css定位
document.querySelectorAll("css selector")
6.xpath定位
document.evaluate("${element}",document).iterateNext()
${element}为xpath元素定位的内容。
二.验证js元素定位的正确性
fn+F12,选择console控制台。
在console控制台输入js元素定位,回车键后没有报错并且在下方展示元素定位。
三.js操作页面元素
进行js操作时,js操作前需要先写明方法表示是js操作。例如:robotframework使用的是execute javascript关键字,Java使用的是executeScript()方法。
1.js点击:加.click()
元素可能被定位到,但是无法通过click点击。是由于点击事件被父元素消耗。
document.evaluate("${element}",document).iterateNext().click()
2.js双击
${element}.click(); #点击事件 var clickEvent=document.createEvent('MouseEvents'); #创建clickEvent对象实例 clickEvent.initEvent('dblclick',true,true); #初始化事件,双击。事件类型,是否冒泡,是否阻止浏览器的默认行为
${element}.dispatchEvent(clickEvent) #触发事件
3.js输入
当有些控件要输入但是标签不是input时,点击不可直接输入,例如时间控件,属性中含有readonly。这时就需要用js先进行属性删除,然后再输入内容。
document.evaluate("${element}",document).iterateNext().removeAttribute('readonly') #去除readonly属性才可以输入
去除readonly属性后,如果input无法输入,可以使用fill text关键字或者键盘输入。
4.js设置值
当遇到时间控件不可以直接输入时,也可以尝试通过给元素设置值来实现输入。
document.evaluate('${element}',document).iterateNext().click(); var clickEvent=document.createEvent('HTMLEvents'); clickEvent.initEvent('change',true,true); #初始化事件,change事件 document.evaluate('${element}',document).iterateNext().dispatchEvent(clickEvent)
设置后的值需要验证是否能正常保存。