在元素定位过程中使用最多的是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‘]) # 不自动关闭浏览器 option.add_experimental_option("detach", True) self.driver= webdriver.Chrome(chrome_options=option) self.driver.get("http://www.baidu.com") 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()