web自动化测试元素定位方法

一、做自动化测试脚本的时候,我们通常会有如下的步骤:

  1. 通过某些方式定位到我们要执行的对象、目标(Target)
  2. 对这个对象进行什么操作(command)
  3. 通过操作对定位到的元素赋值(value)
  4. 添加断言操作

二、首先要解决的是元素定位问题,这个内容分开来讲就是何为页面元素?如何定位?

  1. 什么是页面元素?

在浏览上能显示所有的要素,如图片、文本框、按钮、下拉列表、视频等…

  1. 如何定位页面元素?

selenium webdriver中提供了8中页面元素定位方式,如下:

1、id属性定位->find_element_by_id(“id属性值”)

最常用的一种元素定位方式,一般情况下ID属性不会重复,但不排除特殊情况。
两种不同导入时间方法

from selenium import webdriver
#from time import sleep#导入time模块sleep方法
#sleep(3)#就可以直接使用
##
import time
time.sleep(3)#加时间使用,指多少时间之后开始操作 

用id属性值定位

#导包、创建浏览器对象、获取一下url地址
from selenium import webdriver
import time

#driver:就是一个普通的变量,dr也行
driver = webdriver.Chrome()#用谷歌浏览器打开,注意:浏览器首字母大写
driver.get("https://www.baidu.com")#get要打开的网站

#通过ID来定位文本框和百度一下
driver.find_element_by_id("kw").send_keys("selenium")#输入值
time.sleep(2)
driver.find_element_by_id("su").click()#id定位后点击搜索
time.sleep(2)#两秒后触发

#退出浏览器对象
driver.quit()

2、name属性定位->find_element_by_name(“name属性值”)

name属性可能会出现重复,建议开发要保证ID或者那么有一个不能重复。

#导包、创建浏览器对象、获取一下url地址
from selenium import webdriver
import time

#driver:就是一个普通的变量,dr也行
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

#通过name属性定位元素
driver.find_element_by_name("wd").send_keys("selenium")
time.sleep(2)
driver.find_element_by_id("su").click()
time.sleep(2)
#退出浏览器对象
driver.quit()

3、class 属性定位->find_element_by_class_name(“class属性值”)

对某些具有相同类的元素一网打尽的好方法

from selenium import webdriver
# from time import sleep #要么用from xx import xx 方法 要么用直接import xx导入
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
aa=driver.find_element_by_class_name("c-color-t").click()#根据类名的方法定位便签
time.sleep(3)
driver.quit()

4、tag name:->find_element_by_tag_name(“标签名”)

重复率高,定位效率低,基本不用

 from selenium import webdriver
 from time import sleep
 driver=webdriver.Chrome()
 driver.get("https://www.baidu.com")
 aa=driver.find_elements_by_tag_name("a")#根据标签定位,输出的是一个列表
#  print(aa)
 for i in aa[7:9]:#用遍历的方法取出
     i.click()#点击取出的超链接
 sleep(3)
 driver.quit()#退出

5、link text:->find_element_by_link_text(“链接的显示文本”)

超链接的显示文本信息,较为常用,参数是全部文本信息。精准的根据参数名字打开超链接

from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_link_text("学术").click()#必须精准写出全名
sleep(3)
driver.quit()

6、partial link text:->find_element_by_partial_link_text(“部分链接的显示文本”)

超链接的显示文本信息,较为常用,参数是部分文本信息即可,相当于模糊查询

from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_partial_link_text("hao").click()#可以模糊查询
sleep(3)
driver.quit()

7、css:->find_element_by_css_selector(“css”)

  • 表示class类选择器,.s_ipt,.s_btn
  • 表示ID选择器,#kw、#su
  • 表示父子关系,form#form > span > input
  • 直接通过浏览器复制:#su
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
#driver.find_element_by_css_selector('.s_ipt').send_keys("selenium")#类的选择方式
driver.find_element_by_css_selector("form#form > span > input#kw").send_keys("selenium")#表示父子关系
time.sleep(1)
# driver.find_element_by_css_selector('.s_btn').click()#类的方法
driver.find_element_by_css_selector('#su').click()#地址方法
time.sleep(3)
driver.quit()

三、注意事项

  • 建议与开发协商,保证id属性的唯一性,优先使用id进行定位
  • 动态id属性时,建议使用xpath的相对路径定位
  • 灵活使用元素等待,避免因页面加载而导致的定位失败
  • css是配合html来工作,它实现的原理是匹配对象的原理,而xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀、语言更简洁,明了
  • 总之一句话,不管哪种方式,以能唯一定位到元素为准

你可能感兴趣的:(web测试,web测试,python,selenium,css,定位)