Selenium 八种元素定位方法

前言:

我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素。工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素。那么我们怎么来定位他们呢?

在学习元素定位之前,我们最好能懂一点html的知识。

一、查看页面元素

用谷歌浏览器打开百度首页,按F12,就可以看到整个页面的html代码了
Selenium 八种元素定位方法_第1张图片

二、元素定位

  • id定位: find_element_by_id()
from selenium import webdriver
from time import sleep

drive = webdriver.Chrome()
drive.get('http://www.baidu.com')
sleep(3)
drive.find_element_by_id("kw").send_keys("selenium python")  # 通过 id 定位到搜索框,发送值 selenium python,find_element_by_id 查找元素通过 id
sleep(3)
drive.find_element_by_id("su").click()  # 通过 id 定位到搜索按钮,点击
sleep(3)
drive.quit()
  • name定位:find_element_by_name()
from selenium import webdriver
from time import sleep

drive = webdriver.Chrome()
drive.get('http://www.baidu.com')
sleep(3)
drive.find_element_by_name("wd").send_keys("selenium python")  # 通过 id 定位到搜索框,发送值 selenium python,find_element_by_id 查找元素通过 id
sleep(3)
drive.find_element_by_id("su").click()  # 通过 id 定位到搜索按钮,点击
sleep(3)
drive.quit()
  • tag定位:find_element_by_tag_name() ---下面代码仅做参考,运行时必定报错
from selenium import webdriver
from time import sleep

drive = webdriver.Chrome()
drive.get('http://www.baidu.com')
sleep(3)
drive.find_element_by_tag_name("input").send_keys("selenium python")  # 通过 id 定位到搜索框,发送值 selenium python,find_element_by_id 查找元素通过 id
sleep(3)
drive.find_element_by_id("su").click()  # 通过 id 定位到搜索按钮,点击
sleep(3)
drive.quit()
  • link定位:find_element_by_link_text()
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_link_text('新闻').click()
sleep(3)
driver.quit()
  • partial_link定位:find_element_by_partial_link_text()
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_partial_link_text('闻').click()
sleep(3)
driver.quit()
  • class_name定位:find_element_by_class_name()
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_class_name("s_ipt").click()
sleep(3)
driver.quit()
  • CSS定位:find_element_by_css_selector()
    Selenium 推荐使用 css 定位,而不是 xpath 来定位元素,原因是 css 定位比 xpath 定位速度快,语法也更加简洁
    Css 常用方法定位
    (1) find_element_by_css_selector()
    (2) #id id 选择器根据 id 属性来定位元素
    (3) .class class 选择器,根据 class 属性值来定位元素
    (4) [attribute=’value’] 根据属性来定位元素
    (5) element>element 根据元素层级来定位 父元素>子元素
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_css_selector('#kw').click()
sleep(3)
driver.quit()

css相对路径定位:

driver.find_element_by_css_selector("input[value='查询']")
  • xpath定位:find_element_by_xpath
    1.标签+属性定位——xpath = "//标签名[@属性='属性值']"
    例如,百度首页的输入框的xpath就可以表示为//[@id="kw"],其中表示所有的标签名
    当单一的属性无法确定到一个元素时,可以使用组合属性的方式
    例如,百度首页的输入框可以表示为//*[@id="kw" and @name="wd"]
    当然,也可以使用其他的逻辑运算,比如or、not
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_xpath('//*[@id="kw"]').click()
sleep(3)
driver.quit()

2.text()方法定位

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_xpath("//*[text()='新闻']").click()
sleep(3)
driver.quit()

3.contains()方法定位,也叫模糊定位
xpath = "//标签名[contains(@属性, '属性值')]"

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_xpath("//a[contains(@name,'news')]").click()
sleep(3)
driver.quit()

4.starts-with ,ends-with方法定位
starts-with -- 匹配以xx开头的属性值;ends-with -- 匹配以xx结尾的属性值

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_xpath("//*[starts-with(@value,'百度一')]").click()
sleep(3)
driver.quit()

5.如果一个元素无法通过自身的属性定位到,那么可以先定位到他的上一级或者上N级,然后再一级一级地找到他

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_xpath("//form[@id='form']/span[contains(@class,'s_ipt_wr')]/input").send_keys("selenium")
sleep(3)
driver.quit()

你可能感兴趣的:(Selenium 八种元素定位方法)