在作web应用的自动化测试时,定位元素是必不可少的,这个过程常常会碰到定位不到元素的状况,通常能够从如下几个方面着手解决:html
一、Frame/Iframe缘由定位不到元素:web
这个是最多见的缘由,首先要理解下frame的实质,frame中其实是嵌入了另外一个页面,而webdriver每次只能在一个页面识别,所以须要先定位到相应的frame,对那个页面里的元素进行定位。跨域
二、Xpath描述错误缘由:安全
这种状况有多是:app
一、xpath语法规则书写错误,这个木有办法,补下xpath的语法,多写写,练练就好。函数
二、xpath层极太长,容易犯晕,好比我就写过://div[@id='mainBody']//div[1]//div[1]//div[1]//div[1]//div[1]//div[1]//div[2]//ul[1]//li[1]//a[1]测试
虽然最后仍是调对了,调试的时候就是一层一层的定位,这种方法比耗时,但好在还算管用。firefox
最终的方法仍是要提升下写xpath的水平。调试
三、页面尚未加载出来,就对页面上的元素进行的操做:code
这种状况通常说来,能够设置等待,等待页面显示以后再操做,这与人手工操做的原理同样:
一、设置等待时间;缺点是须要设置较长的等待时间,案例多了测试就很慢;
二、设置等待页面的某个元素出现,好比一个文本、一个输入框均可以,一旦指定的元素出现,就能够作操做。
三、在调试的过程当中能够把页面的html代码打印出来,以便分析。
4.动态ID定位不到
解决方法:使用xpath的相对路径来定位
5.firefox安全性强,不容许跨域调用出现报错
错误描述: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: 解决办法:
这是由于firefox安全性强,不容许跨域调用。
Firefox 要取消XMLHttpRequest的跨域限制的话,第一是从 about:config 里设置
signed.applets.codebase_principal_support = true; (地址栏输入about:config 便可进行
firefox设置)
第二就是在open的代码函数前加入相似以下的代码: try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } catch (e)
{ alert("Permission UniversalBrowserRead denied."); }
乙醇的作法: