Selenium2(webdriver)_定位不到元素常见缘由及解决办法

在作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."); }

乙醇的作法:

输入图片说明

相关文章
相关标签/搜索