您的位置:首页 > 编程语言 > Python开发

Python + Selenium 元素定位方法归纳

2019-03-15 19:36 211 查看

【1】介绍:WebDriver 属于 Selenium 体系中设计出来操作浏览器的一套API,支持多种编程语言

【2】WebDriver 提供了八种元素定位方法,在Python语言中,所定位的方法如下:

【3】id 定位

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://baidu.com")
driver.find_element_by_id("kw").send_keys("selenium 配置")
driver.find_element_by_id("su").submit()
print("成功根据百度搜索框的ID搜索关键字")

driver.quit()

【4】name 定位

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://baidu.com")

driver.find_element_by_name("wd")
print("我通过name方法定位到百度页的搜索框")

driver.quit()

【5】class 定位
元素class属性。Class 主要用来元素进行分组,并对这一级元素设置相同的样式。所以Class属性在当前HTML页面中,也不能唯一定位到一个元素

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://baidu.com")
driver.find_element_by_class_name("s_ipt").send_keys("自动化测试")
driver.find_element_by_class_name("btn self-btn bg s_btn").click()

driver.quit()

【6】tag name 定位

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://baidu.com")
driver.find_element_by_tag_name("input")

driver.quit()

【7】link text 定位

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(1)

driver.get("http://baidu.com")
try:
driver.find_element_by_link_text("新闻").click()
print("test pass:element found by link text")
except Exception as e:
print("Exception found",format(e))

driver.quit()

【8】partial link text 定位

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(1)

driver.get("http://baidu.com")
try:
driver.find_element_by_partial_link_text("新").click()
print("test pass:element found by link text")
except Exception as e:
print("Exception found",format(e))

driver.quit()

【9】XPath 定位:
Xpath 定位是将整个html 看成一个树形结构。Html 节点为根节点。页面当中节点与其他节点可以有祖先、父辈、兄弟、后代这样的关系存在

提醒:Chrome 的插件XPath Helper ,可定位XPath 跟CSS Selector ,不推荐使用,是用绝对路径定位

1)绝对定位 洗:以单斜杠(/)开头,不推荐使用这种方式,页面元素一点发生改变,绝对路径就会失效,一层层定位效率也低。

2)相对定位以双斜杠(//)开头,可通过元素本身的特征(标签名、属性)定位

3)使用标签名+节点属性定位
语法: //标签名[@属性名=值]

4)组合元素索引(下标)定位:不推荐,下标容易发生变化
例子://li[@class=‘I’][2]//img

5)通过部分属性值匹配
语法://标签名[contains(@属性名,部分属性值)]
例子://img[contains(@src,‘288551_nvsc_1182.jpg’)]

6)使用文本内容匹配
函数;text()
文本全部匹配:text()=文本内容
文本部分匹配:contains(text(),部分文本内容)
例子:
文本全匹配://h2[text()=‘软件测试从零开始’]
文本部分匹配://h2[contains(text(),‘从零开始’)]

7)使用轴定位表达式:麻烦不易理解,不推荐使用

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(1)

driver.get("http://baidu.com")
try:
driver.find_element_by_xpath("//*[@id='kw']").send_keys("XPath插件安装")
driver.find_element_by_xpath("//*[@id='su']").click()
driver.implicitly_wait(20)
print("test pass:element found by link text")
except Exception as e:
print("Exception found", format(e))

driver.quit()

【10】css selector 定位

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(1)

driver.get("http://baidu.com")
try:
driver.find_element_by_css_selector("#kw").send_keys("XPath插件安装")
driver.find_element_by_css_selector("#su").click()
print("test pass:element found by link text")
except Exception as e:
print("Exception found", format(e))

driver.quit()

【11】查找多个元素
当我们想在页面中找到一组元素,比如说当前页面当中的所有连接
Selenium 提供了一个方法用来定位一组元素:
Find_elements_by_name(class_name/xpath/tag_name/css/link_text/partial_link_text)
此函数的返回结果为一个列表,列表中存储的是符合定位表达式的所有元素
注意区别:element 有个s

【12】用By 定位元素
统一调用find_element()方法,通过By 来声明定位的方法,并且传入对应定位方法的定位参数。具体如下:

find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"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']")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: