4.1从定位元素开始
八种元素定位的方法,及对比
1. id ---5.name (id唯一,name不唯一)
2. class name ---6.tag name (通过tag识别某个元素的概率很低)
3.link text ---7.partial link text
4.xpath ---8.css selector (尽量用css,因为css的效率比xpath要高)
find_element_by_id()
find_element_by_classname()
find_element_by_link_text()
find_element_by_xpath()
4.1.1id定位
id的属性,在HTML文档中必须是唯一的。
#通过查看百度的前端代码,查看搜索输入框的id为kw。
find_element_by_id("kw")
4.1.2name定位
name的属性值,在HTML中,可以不唯一。
find_element_by_name("wd")
4.1.3class定位
通过class属性来定位。
find_element_by_class_name("s_ipt")
4.1.4tag定位
因为html的本质是通过tag来定义实现不同功能。存在大量的tag。所以用tag来识别某一元素概率较低。
find_element_by_tag_name("input")
4.1.5link定位
link定位,专门用来定位文本链接。通过元素之间的文本信息来定位标签。
find_element_by_link_text("新闻")
4.1.6partial link定位
partial link 是对link的一种补充。对于较长的文本链接,会截取其中一部分来定位。只要这一部分可以唯一标识这个链接。
driver
.find_element_by_partial_link_text(
"一个很长的"
)
driver
.find_element_by_partial_link_text(
"文本链接"
)
xpath和css比前面几种更加灵活
4.1.7xpath定位
绝对路径定位,需要一层一层的往下找。如果同级有多个相同标签,需要标注从上往下的第几个。例如下方百度的搜索文本输入框的定位:
driver
.find_element_by_xpath(
"/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input"
).send_keys(
"Selenium3"
)
虽然准确,但是效率很低。
使用元素属性定位
Xpath也可以利用元素属性来定位,例如百度输入框
#driver.find_element_by_xpath("//input[@id='kw']").send_keys("Selenium3") #使用xpath 元素属性定位
层级和属性结合
driver.find_element_by_xpath(
"//form[@id='form']/span/input"
).send_keys(
"尹巧灵"
)
使用逻辑运算符
通过and来附加多个条件。
driver.find_element_by_xpath("//input[@id='kw'and @class='s_ipt']").send_keys("loveyou")#使用逻辑运算符
学会定位xpath
使用火狐浏览器,打开测试网页,点击之前安装的firepath,里面有xpath。可以直接复制定位路径。
4.1.8css定位
css使用选择器来为页面元素绑定属性。这些选择器也可以被Selenium使用。
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")
1> 通过>大于号表示父子关系。
find.element_by_css_selector(”.span>input") span是父亲元素。input是子元素
2> 通过属性定位
find.element_by_css_selector(”[name='kw']")
对属性值kw,可以加引号,也可以不加。但要注意整个字符串的引号区分。引号不能交叉用,可以嵌套。
3> 组合定位
css可以通过标签,父子关系,属性,id。组合定位元素。
driver
.find_element_by_css_selector(
"form#form>span>input.s_ipt"
).send_keys(
"loveyou"
)
4.1.9用BY定位元素
除了前面介绍的八种方法,webview还有另一套写法,即统一调用find_element()方法,通过BY来声明定位的方法,并对定位方法传递参数。具体如下:
find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,"新闻")
find_element(By.PARTIAL_LINK_TEXT,"新")
find_element(By.XPATH,"//*[@class='bg.s_btn']")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")