八种元素定位的方法,常用的有id、name、class、tag、link、partial link、Xpath、css,道理我都懂,可是我在用的时候如何挑选哪种呢?方法很重要,但是思路不对的话,使用的方法可能还是不奏效。
一.id定位,html规定id属性在html文档中必须是唯一的(类似于公民的身份证号级别),具有很强的唯一性;
find_element_by_id()方法,应用:find_element_by_id('su’)
二.name定位,html规定name指定元素的名字(类似于人的名字),在当前页面可以不唯一;
find_element_by_name()方法,应用:find_element_by_name(‘kw’)
三.class定位,html规定class指定元素的类名;
find_element_by_class_name()方法,应用:find_element_by_class_name(’S_ipt’)
四.tag定位,html的本质通过tag定义实现不同的功能,如<div>、<input>、<a>等tag(标签),tag方法很少用,准确率很低;
find_element_by_tag_name(),应用:find_element_by_tag_name(‘input’)
五.link定位,专门用来定位短的文本链接的方法;
find_element_by_link_text(),应用:find_element_by_link_text('新闻’)
六. partial link定位,专门用来定位长的文本链接的方法;
find_element_by_partial_link_text(),应用:find_element_by_partial_link_text(‘很长文本’)
七.Xpath定位,应用场景存在多个id、name、class属性,多个id、name、class属性相同,每次刷新id、name、class属性都会变化;
find_element_by_xpath()方法
1.绝对路径定位;
find_element_by_xpath(‘/html/body/div/div/div[4]/div/div/form/span/input')
注:div[4]是指第四个div;
2.利用元素属性定位;
find_element_by_xpath(‘//input[@id=‘ku']’)
注://指当前页面某个目录下;
input表示定位元素标签名;
[@id=‘ku']表示这个元素id属性等于ku;
find_element_by_xpath(‘//*[@class=‘ku']’)
注:*不指定标签名
find_element_by_xpath(‘//input[@type=‘ku']’)
注:type标签可任意指定,只要它是唯一的标识一个元素即可;
3.利用层级和属性的结合;
find_element_by_xpath(‘//span[@id=’s_btn_wr’]/input')
假设,这样还找不到继续往父级标签找:
find_element_by_xpath(‘//div/from[id=‘form']/span/input’)
4.使用逻辑运算符;
find_element_by_xpath(‘//form/span[@id=’s_btn_wr’and @class=’s_btn_wr_s_btn_wr_bg']/input)
也可使用firebug来“复制xpath”得到当前元素的语法,chrome也可以。
八 .css定位,css层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言;
find_element_by_css_selector()
1.通过class属性定位(点号“.”表示通过class属性定位元素);
find_element_by_css_selector(“.s_ipt")
2.通过id属性定位(井号“#”表示通过id属性定位元素);
find_element_by_css_selector(“#kw”)
3.通过标签名定位,用标签名不需要任何标识符标识(一般很容易重复,很少用);
find_element_by_css_selector(“input”)
4.通过父子关系定位;
find_element_by_css_selector(“span>input”)
5.通过属性定位;
find_element_by_css_selector(“[autocomplete=“off"]”)
find_element_by_css_selector(“[name="wd"]”)
6.组合定位;
find_element_by_css_selector(“form.fm>span>input#s_ispt”)
find_element_by_css_selector(“form#form>span>input#id”)
注:也可用用firepath生成CSS语法,办法跟xpath类似。
即使有了八把方法,在实际应用中可能还是找不到元素,这个时候首先排查是不是环境问题(如:浏览器自动升级了与驱动不匹配),排除这个问题后,可能有下面几个问题影响:
1.它可能找到了多个元素;
2.多数web应用程序使用AJAX技术,浏览器加载页面可能不是同步完成,会出现ElementNotVisbleException报错可以通过设置元素等待解决这种问题;
3.表单是嵌入式的,需要使用switch_to.frame(),切入镶嵌表单。
·····可能还有更多...