-
通过元素id定位元素
driver.find_element_by_id('kw')
driver.find_element_by_id('cn.cntv:id/history_image_button')
-
通过class定位元素
elements_list = wd.find_elements_by_class_name('title-content-title')
-
通过name属性定位元素
elements = wd.find_element_by_name('wd')
-
通过标签名定位元素
elements_list = wd.find_elements_by_tag_name('span')
-
通过link_text定位元素 a标签文字
element = wd.find_element_by_link_text('新闻')
-
通过partial_link_text定位元素 模糊匹配 a标签
a = wd.find_element_by_partial_link_text('地')
webdriver查找的是整个web页面的所有元素,webElement对象查找的是该元素内部的子元素
ele = wd.find_element_by_class_name('s-hotsearch-content')
ele_list = ele.find_elements_by_tag_name('span')
- CSS选择器
- id选择器
element = wd.find_element_by_css_selector('#su')
- class选择器
elements = wd.find_elements_by_css_selector('.title-content-title')
- 标签选择器
elements = wd.find_elements_by_css_selector('a')
- 通过属性定位元素
element = wd.find_element_by_css_selector('[name="tj_settingicon"]')
- 直接子元素选择器
element = wd.find_element_by_css_selector('ul>[data-index="0"]>.title-content')
- 后代元素选择器
element = wd.find_element_by_css_selector('ul>[data-index="0"] .title-content-title')
- 按次序选择子元素
# li标签的第二个
element = wd.find_element_by_css_selector('.s-hotsearch-content>li:nth-child(2)')
# li标签类型的第二个
element = wd.find_element_by_css_selector('.s-hotsearch-content li:nth-of-type(2)')
# print(element.text)
# 偶数节点
elements = wd.find_elements_by_css_selector('.s-hotsearch-content li:nth-child(even)')
# 奇数节点
elements = wd.find_elements_by_css_selector('.s-hotsearch-content li:nth-of-type(odd)')
- 与
# 同时满足标签和class,即class为title-content-title的span
elements = wd.find_elements_by_css_selector('span.title-content-title')
- 或
# , 表示或 选择器中不能加括号 紧挨着写是与
elements = wd.find_elements_by_css_selector('.s-hotsearch-content > [data-index="0"] , .s-hotsearch-content > .even')
- 其它
# 属性以xxxx开头的元素
elements = wd.find_elements_by_css_selector('span[class^="title"]')
# 属性以xxxx结尾
elements = wd.find_elements_by_css_selector('span[class$="title"]')
# 属性包含xxxx
elements = wd.find_elements_by_css_selector('span[class*="content"]')
- 兄弟选择器
# 兄弟节点 .top-0后面紧跟的span
element = wd.find_element_by_css_selector('.top-0 + span')
# 兄弟节点 .top-0后面所有的span
elements = wd.find_elements_by_css_selector('.top-0 ~ span')
-
xpath
注意:xpath下标从1开始
- 绝对路径定位元素
elements = wd.find_elements_by_xpath('/html/body/div/div[1]/div[3]/a')
- 相对路径定位元素
# 直接子节点
titles = wd.find_elements_by_xpath('//div/ul/li/a/span[2]')
# 子节点
titles = wd.find_elements_by_xpath('.//div//li//span[2]')
# 通配符 ul中所有直接子节点
eles = wd.find_elements_by_xpath('//ul/*')
# driver.find_element_by_xpath('//*[contains(@text, "云课堂")]').click()
yunketang = driver.find_element_by_xpath('//*[@class="android.widget.HorizontalScrollView"]//android.widget.LinearLayout[3]')
yunketang.click()
- 按属性定位
btn = wd.find_element_by_xpath('//input[@value="百度一下"]')
btn = wd.find_element_by_xpath('//*[@id="su"]')
# class不能只写一个,要全写上
btn = wd.find_element_by_xpath('//*[@class="bg s_btn"]')
elements = wd.find_elements_by_xpath('//li[@class="hotsearch-item even"]')
# 有value属性的元素
elements = wd.find_elements_by_xpath('//*[@value]')
- 按次序定位
# ul中第一个li标签中的第二个span
span = wd.find_element_by_xpath('//ul/li[1]//span[2]')
# 最后一个span
last_span = wd.find_element_by_xpath('//ul/li[1]//span[last()]')
# 倒数第二个span
span = wd.find_element_by_xpath('//ul/li[1]//span[last() - 1]')
# 前两个
span_list = wd.find_elements_by_xpath('//ul/li[1]//span[position()<=2]')
# 选取class属性为hotsearch-item odd的第一个li标签中的前两个span
# e_list = wd.find_elements_by_xpath('//*[@class="hotsearch-item odd"][1]//span[position()<=2]')
- 路径与逻辑结合
span = wd.find_element_by_xpath('//li[@class="hotsearch-item odd" and @data-index="0"]//span[2]')
li_list = wd.find_elements_by_xpath('//li[@class="hotsearch-item odd" or @class="hotsearch-item even"]')
- 其它
# 文本内容是xxxx的元素 //*[text() = "xxxx"]
element = wd.find_element_by_xpath('//*[text() = "百度热榜"]')
# 属性中含有xxxx的元素 //*[contains(@attribute, "xxxx")] 移动端自动化测试用的比较多
element = wd.find_element_by_xpath('//*[contains(@href, "login")]')
driver.find_element_by_xpath('//*[contains(@text, "云课堂")]')
# 属性以xxxx开头的元素
element = wd.find_element_by_xpath('//*[starts-with(@href, "https://passport.baidu.com")]')
- 定位父节点
在定位元素语句后加 /..
driver.find_element_by_xpath('//*[contains(@text, "云课堂")]/..')
在Android中,只能找到屏幕中显示的控件,比如滑动才能显示的控件就找不到;
在iOS中,可以找到整个页面中所有控件,但是要操作的话,还是需要展现在屏幕上才可以。
网友评论