前言
最近一直在用Selenium,就想着把学到、用到的东西都整理出来,方便日后自己忘了容易找,也能供自动化测试的初学者学习,希望对大家能有所帮助。
元素定位
以谷歌浏览器为例,首先按快捷键F12进入开发者工具,先点击左上角的小箭头,之后将鼠标放在我们想要定位的元素上,用灰色背景加深出来的部分即为对应元素的属性。
其他浏览器与谷歌类似,IE浏览器、Edge浏览器、Firefox浏览器的开发者工具快捷键均为F12,Safari浏览器的网页检查器的快捷键为option+command+1。
id定位
通过元素对应的ID属性值获取元素。语句如下:find_element(By.ID, 'id')
以定位百度的搜索框为例,首先找到百度搜索框对应的属性,方法在上一节。可以看到搜索框对应的id为"kw"。
此时,我们使用find_element(By.ID, 'id')进行定位,源码如下:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)
driver = webdriver.Chrome(options = option)
driver.get("https://www.baidu.com/")
time.sleep(0.5)
driver.find_element(By.ID, 'kw')
但运行之后发现,没有任何结果,那我们怎么验证正确性呢?这个时候我们可以运用断言assert,可以看到输入框有个属性是maxlength,属性值为255。
如果我们定位元素的maxlength属性值与其相等,那就证明定位准确,源码如下:
kw_maxlength = driver.find_element(By.ID, 'kw').get_attribute('maxlength')
assert kw_maxlength=='255'
print('ID定位正确!')
这里需要说明一下,如果断言正确的话,是不会返回任何结果的,所以加上一个print能直观的看到结果。
class定位
通过元素对应的class属性值获取元素。语句如下:
driver.find_element(By.CLASS_NAME,'class'),以定位百度一下按钮为例,可以看到按钮对应的class属性值为s_btn。
此时,我们使用driver.find_element(By.CLASS_NAME,'class')进行定位,并用断言进行验证,源码如下:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)
driver = webdriver.Chrome(options = option)
driver.get("https://www.baidu.com/")
time.sleep(0.5)
driver.find_element(By.CLASS_NAME, 's_btn')
btn_value = driver.find_element(By.CLASS_NAME, 's_btn').get_attribute('value')
assert btn_value == '百度一下'
print('Class定位正确')
name定位
这种定位方式其实与上述两种定位方式类似,这里就不再细说了,还是以定位百度搜索框为例,直接上代码:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)
driver = webdriver.Chrome(options = option)
driver.get("https://www.baidu.com/")
time.sleep(0.5)
driver.find_element(By.NAME, 'wd')
wd_maxlength = driver.find_element(By.NAME, 'wd').get_attribute('maxlength')
assert wd_maxlength == '255'
print('NAME定位正确!')
下期预告
Selenium 基础教程——元素定位(中)
1.tag定位
2.xPath定位
3.link定位
4.Partial link定位
工作繁忙,整理时间有限,敬请谅解!