python-selenium定位方法

元素选择策略
在 WebDriver 中有 8 种不同的内置元素定位策略:

定位器 描述
class name 定位class属性与搜索值匹配的元素(不允许使用复合类名)
css selector 定位 CSS 选择器匹配的元素
id 定位 id 属性与搜索值匹配的元素
name 定位 name 属性与搜索值匹配的元素
link text 定位link text可视文本与搜索值完全匹配的锚元素
partial link text 定位link text可视文本部分与搜索值部分匹配的锚点元素。如果匹配多个元素,则只选择第一个元素。
tag name 定位标签名称与搜索值匹配的元素
xpath 定位与 XPath 表达式匹配的元素

class name定位
1.查找元素:页面打开f12,点击左上角的箭头,再去点击对应需要定位的元素定位,找到该元素下的class属性,在ctrl+f查找,该属性是否唯一,唯一就可以定位,不唯一就换其他方法定位:(一时找不到class唯一的,就用下图代替说明问题) python-selenium定位方法_第1张图片
定位代码:

# 导入需要的包
from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Chrome() # 实例化webdriver
driver.get("http://www.baidu.com/") # 打开网页
driver.find_element(By.CLASS, "login-item")

nam、id、link tex、tag name定位和class name类似

driver.find_element(By.NAME, "name定位元素")
driver.find_element(By.ID, "id定位元素")
driver.find_element(By.LINK_TEXT, "LINK_TEXT定位元素")
driver.find_element(By.PARTIAL_LINK_TEXT, "PARTIAL_LINK_TEXT定位元素")
driver.find_element(By.TAG_NAME, "TAG_NAME定位元素")

主要介绍xpath定位,这个可以应对测试中80%以上的定位
1.使用xpath方法结合id、name、class定位也可以

driver.find_element(By.XPATH, "//*[@class='login-default']").click()
driver.find_element(By.XPATH, "//*[@name='login-default']").click()
driver.find_element(By.XPATH, "//*[@id='login-default']").click()

2.xpath:其他属性定位:在实际工作过程中,往往会遇到一个元素id、name、class属性都没有,这时候也可以通过其它属性定位到

driver.find_element(By.XPATH, "//*[@type='password']")

3.xpath:标签定位,在实际工作中,还会遇到一种情况就是相同属性具有同一个名字,这时就需要通过标签筛选,定位更准一点
如果不想制定标签名称,可以用*号表示任意标签
如果想制定具体某个标签,就可以直接写标签名称

driver.find_element(By.XPATH, "//input[@type='password']").send_keys("gld123")
driver.find_element(By.XPATH, "//a[@class='login']").click()

4.xpath:相对路径/绝对路径定位,

  1. 如果一个元素,它的属性不是很明显,无法直接定位到,这时候我们可以先找它上一层元素(父元素)
  2. 找到父元素后,再找下个层级就能定位到了
  3. 要定位的是input这个标签,它的老爸的id=s_kw_wrap.
  4. 要是它老爸的属性也不是很明显,就找它爷爷id=form
  5. 于是就可以通过层级关系定位到
driver.find_element(By.XPATH, "//div[@class='login-default']/div/span/input").send_keys("17027517202")

5.xpath:索引,

  1. 如果一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。
  2. 虽然双胞胎兄弟很难识别,但是出生是有先后的,于是可以通过它在家里的排行老几定位到。
  3. 用xpath定位老大、老二和老三(这里索引是从1开始算起的,跟Python的索引不一样)
driver.find_element(By.XPATH, "//div[@class='login-default']/div[2]/span/input").send_keys("17027517202")

6.xpath:逻辑运算

  1. xpath还有一个比较强的功能,是可以多个属性逻辑运算的,可以支持与(and)、或(or)、非(not)
  2. 一般用的比较多的是and运算,同时满足两个属性
driver.find_element(By.XPATH, "//input[@type='password' and @class='login-default']").send_keys("gld123")

你可能感兴趣的:(python,python,selenium,chrome)