selenium03-选择web元素的方法
怎么寻找网页元素,可以说是WebUI自动化最重要的东西之一。本篇主要讲的是选择web元素的一些基本方法,主要以“新浪财经网”为例。包括:通过id/name/class/tag以及通过超链接文本选择元素,后面将会循序渐进的讲一些更高级定位元素的方法。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!
01:WebUI自动化三部曲
①选择界面元素
②操作界面元素(输入操作和输出操作)
③根据界面上获取的数据进行分析和处理
02:WebDriver和WebElement基本功能
1)WebDriver:操作整个浏览器和当前整个页面
①当前页面上的选择符合查找条件的对象
②打开网址、回退、前进、刷新网页等
③获取、改变浏览器串口大小,关闭浏览器、截屏等
④获取、设置cookies2)WebElement:操作和对应web元素
①当前web元素的所在子元素里面符合查找条件的对象
②操作该web元素(点击元素、输入字符、获取元素属性信息等)
03:2种常见获取元素信息的方法
1)text:显示该元素在web页面显示出来的文本内容,使用WebElement的 text属性。
2)get_attribute:有三种用法。
①获取元素属性的值:get_attribute("content")
②整个web元素的HTML片段:.get_attribute('outerHTML')
③web元素内部子元素HTML片段:get_attribute('innerHTML')
from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://finance.sina.com.cn/money/globalindex/')
04:通过id选择元素
1)element =driver.find_element_by_id("hq_sh000001")
2)唯一性,查找的效率最高
#获取上证指数行情(id=hq_sh000001)
ele=driver.find_element_by_id('hq_sh000001')
#获取元素文本信息
print(ele.text)
05:通过name选择元素
1)返回第一个找到的元素,如果找不到会报错。
例:element= driver.find_element_by_name("description")2)返回所有元素。如果找不到返回空列表,不抛出异常。
例:element= driver.find_elements_by_name("name")
#获取name=description的元素
ele = driver.find_element_by_name("description")
#获取description中属性为content的值
print(ele.get_attribute("content"))
#返回所有元素
#不知道某个元素是否存在,可以通过所返回的列表元素是否为空来做一些相应处理
name = driver.find_elements_by_name("name")
# print([one.text for one in name]) #返回空列表[]
if name ==[]:
print('未找到该元素')
else:
print('该元素存在')
06:通过class选择元素
1)返回第一个找到的元素。
cheeses = driver.find_element_by_class_name("text_info")2)返回所有元素。
cheeses = driver.find_elements_by_class_name("text_info")
#获取意见反馈的内容
ele = driver.find_element_by_class_name("text_info")
print(ele.text)
#获取所有意见反馈的内容
eles = driver.find_elements_by_class_name("text_info")
# print([one.text for one in eles])
for one in eles:
print(one.text)
print('*************************')
07:通过tag名称选择元素
1)返回第一个找到的元素。
cheeses = driver.find_element_by_tag_name("input")2)返回所有元素。
cheeses = driver.find_elements_by_tag_name("span")3)注意事项:通过title标签名获取title元素,打印的文本值为空。因为:
①text显示的应该是网页中可见的内容。title不在网页中,所以显示不出来。
②Title是一个特殊的元素,标签内的文本表示页面的标题,可以通过driver.title属性获取页面标题
#获取标签input中属性为name的值
ele=driver.find_element_by_tag_name('input')
print(ele.get_attribute('name'))
#获取所有span标签的文本信息
eles=driver.find_elements_by_tag_name('span')
for one in eles:
print(one.text)
#获取title标签名称
titles=driver.find_element_by_tag_name('title')
print(driver.title)
08:通过超链接文本选择元素
1)对于链接,可以通过其链接文本的内容进行选择:ele=driver.find_element_by_link_text(u'新浪首页')
2)linkText定位:ele = driver.find_element_by_link_text("新浪首页")
3)通过部分文本来找到该链接元素:ele=driver.find_element_by_partial_link_text("新浪")
#对于文本链接
ele=driver.find_element_by_link_text(u'新浪首页')
ele.click()
#linkText定位:点击打开新浪首页
ele=driver.find_element_by_link_text('新浪首页')
ele.click()
#partial_link定位:点击打开新浪首页
ele=driver.find_element_by_partial_link_text('新浪')
ele.click()
09:id/name/class/tag以及通过超链接文本选择元素总结
1)当页面元素有id属性时,最好尽量用id来定位。如果是动态id或者没有则选择其他定位方法。
2) xpath和css后续讲解
3)当要定位一组相同元素时,可以考虑用tagName或name。
4)当有链接需要定位时,可以考虑linkText或partialLinkText方式。