web⾃动化学习04——xpath定位详解
在元素定位过程中使⽤最多的是xpath定位,有以下⼏种定位⽅法:
1)绝对定位:利⽤html属性,从/html/body/.../... ⼀直到需要定位的元素标签,其中如果存在多个相同的元素标签,如:有5个div标签,此时需要定位到的是第3个标签,则写为div[3] (ps:这种⽅式不推荐,因为前端只要有⼀丁点⼉变动,定位路径就不正确)
2)相对定位:利⽤元素标签和元素标签的id,name,class等值进⾏定位,格式为://标签类型[@属性类型=‘属性值’],如百度搜索框则可以写为://input[@id='kw']
3)利⽤层级与属性:当不能直接定位到元素时,可以定位到它的⽗级或者祖⽗级的元素在定位到指定位置,如百度搜索框:
driver.find_element_by_xpath(" //span[@class='s_ipt_wr']/input")
4)使⽤逻辑连接词:如果⼀个属性不能唯⼀确定⼀个元素时,可以使⽤逻辑连接词( and ,or)来连接多个属性。如百度搜索框:driver.find_element_by_xpath(" //input[@class='s_ipt' and @name='wd']")
5)contains()⽅式:若定位元素的属性中存在多个属性值,如下所⽰,可以使⽤contains(属性,'部分属性值')的⽅式定位,
如://span[contains(class,'s_ipt_wr')]
6)text()⽅式:对于类似链接的元素,可以使⽤text()⽅式根据⽂本信息定位元素,如:定位到百度⾸页的新闻标签,//a[text()='新闻']。同时可以结合contains()来使⽤,如://a[contains(text(),'新闻')
from selenium import webdriver
class elementLocator_Xpath():
def__init__(self):
# 加启动配置
option = webdriver.ChromeOptions()
# 关闭“chrome正受到⾃动测试软件的控制”
# V75以及以下版本
# option.add_argument('disable-infobars')
# V76以及以上版本
option.add_experimental_option('useAutomationExtension', False)
option.add_experimental_option('excludeSwitches', ['enable-automation'])
# 不⾃动关闭浏览器
xpath语法 pythonoption.add_experimental_option("detach", True)
self.driver= webdriver.Chrome(chrome_options=option)
("www.baidu")
self.driver.maximize_window()
#相对定位
def xpath_relative(self):
#定位搜索输⼊框
search_input = self.driver.find_element_by_xpath("//input[@id='kw']")
#输⼊郑州
search_input.send_keys("郑州")
#定位到搜索按钮
search_button = self.driver.find_element_by_xpath("//input[@id='su']")
#点击搜索按钮
search_button.click()
#绝对定位
def xpath_absolute(self):
# 定位搜索输⼊框
search_input = self.driver.find_element_by_xpath("/html/body/div/div/div[5]/div/div/form/span/input")
# 输⼊成都软件测试
search_input.send_keys("成都软件测试")
# 定位到搜索按钮
search_button = self.driver.find_element_by_xpath("/html/body/div/div/div[5]/div/div/form/span[2]/input")
# 点击搜索按钮
search_button.click()
#层级与属性结合
def xpath_level_attribute(self):
'''
定位不到该元素时,可以先定位⽗亲级元素,再定位到该元素
'''
#先定位到搜索输⼊框的上上⼀级
# 定位搜索输⼊框
search_input = self.driver.find_element_by_xpath("//form[@id='form']/span/input") # 输⼊德昌天⽓
search_input.send_keys("德昌天⽓")
# 定位到搜索按钮
search_button = self.driver.find_element_by_xpath("//form[@id='form']/span[2]/input") # 点击搜索按钮
search_button.click()
#逻辑运算符
def xpath_logic_operator(self):
#定位到搜索输⼊框
search_input = self.driver.find_element_by_xpath("//input[@name='wd' and @class='s_ipt']") #输⼊美团
search_input.send_keys("美团")
#定位到搜索按钮
search_button = self.driver.find_element_by_xpath("//input[@id = 'su' or @class = 's_btn']") #点击按钮
search_button.click()
#contains⽅法
def xpath_contains(self):
#定位到搜索框
search_input = self.driver.find_element_by_xpath("//span[contains(@class,'s_ipt_wr ')]/input") #输⼊python⾃动化
search_input.send_keys("python⾃动化")
#定位到搜索按钮
search_button = self.driver.find_element_by_xpath("//input[contains(@class,'s_btn')]") #点击搜索按钮
search_button.click()
#text()⽅法
def xpath_text(self):
#⽅法⼀:定位到新闻链接
#news_href = self.driver.find_element_by_xpath("//a[text()='新闻']")
#⽅法⼆:使⽤contains合text()定位
news_href = self.driver.find_element_by_xpath("//a[contains(text(),'新闻')]")
news_href.click()
#点击新闻链接
elementLocator_Xpath().xpath_text()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论