定位就是通过规则找到html元素,这种场景在我们的生活中随处可见。比如顾客必须通过菜单来准确的告诉米其林自己需要什么菜品。
在实际自动化中我们操作 html元素(主要是操作标签:input ,a,button等等),就需要通过selenium 提供的api 来定位。
现在,针对搜索百度这个场景来编写自动化的用例,拆分出来的步骤如下:
1 定位输入框 //涉及到定位 2 输入要搜索的内容 3 定位“百度一下”按钮 //涉及到定位 4 点击按钮 5 断言 |
在实际编写自动化用例时,大家也一定要记得拆分:定位元素->操作元素->断言。
ID 定位
通过查看html标签,我们看到 该标题有 class, id, name 属性,所以我们优先使用id 进行定位,代码如下
from selenium import webdriver
# 引入定位
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
time.sleep(2)
# 定位元素,定位方法 find_element
input_element=driver.find_element(By.ID,'kw')
# 操作元素
input_element.send_keys('刘德华')
time.sleep(2)
driver.quit()
前提:通过id 定位元素,前提是该元素存在id 属性。
Name 定位
还是定位 该输入框,使用name 进行定位
前提:通过name 定位元素,前提是该元素存在id 属性。
from selenium import webdriver
# 引入定位
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
time.sleep(2)
# 定位元素,定位方法 find_element
input_element=driver.find_element(By.NAME,'wd')
# 操作元素
input_element.send_keys('刘德华')
time.sleep(2)
driver.quit()
classname定位
还是定位 输入框
from selenium import webdriver
# 引入定位
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
time.sleep(2)
# 定位元素,定位方法 find_element
input_element=driver.find_element(By.CLASS_NAME,'s_ipt')
# 操作元素
input_element.send_keys('刘德华')
time.sleep(2)
driver.quit()
特殊情况
现在有一个需求,要求点击新闻链接,验证是否可以正常打开网页。
现在这几个标签使用了相同的 class 属性,这时通过class='mav'定位到的是多个,就不能使用class 来定位.必须使用其他的方式。一个班里有几个同名的同学,老师喊 mav,这几个同名的都会站起来。
文本 定位
就是指 a 标签中间的文本元素,<a>文本内容</a> 这个文本内容就是 selenium 文本定位需要用到的。同样需要考虑实际存在不存在。
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
time.sleep(2)
# 定位元素,定位方法 find_element
input_element=driver.find_element(By.LINK_TEXT,'新闻')
# 操作元素
input_element.click()
time.sleep(2)
driver.quit()
xpath 定位
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
time.sleep(2)
# 定位元素,定位方法 find_element
input_element=driver.find_element(By.XPATH,'//*[@id="kw"]')
# 操作元素
input_element.send_keys('刘德华')
button_element=driver.find_element(By.XPATH,'//input[@id="su"]')
button_element.click()
time.sleep(3)
driver.quit()
可以直接 右键复制。
这些是就是常用的定位方式。xpath 单独用一章来解释。