webdriverselenium_Xpath元素定位
Xpath元素定位
-
使用id,class等属性进行xpath定位
‘//*[@id=“kw”]’ *为省略标签,[]内部为属性 -
使用标签+属性定位
避免多个元素属性名相同
'//span[@class=“title-content-title”]'span为标签,[]内部为属性 -
使用层级的方式
‘//ul[@class=“s-hotsearch-content”]/li’
‘//标签[@属性]/子标签’ -
层级+索引的方式
避免同一层级下面多个标签相同的元素
‘//ul[@class=“s-hotsearch-content”]/li[1]’
‘//标签[@属性]/子标签[序号从1开始]’ -
Xpath属性逻辑判断
使用and or not的方式 同时满足多个属性要求
'//*[@id="kw"and @name=“wd”]'要求id="kw"并且name=“wd” -
Xpath模糊匹配
“//*[contains(text(),‘新闻’)]”
包含文字新闻
# -*- coding: utf-8 -*-
"""
@Time : 2021/5/19 14:14
@Auth : jie.wang
@Email : 1392147363@qq.com
@File : 1.py
@Description : 关于xpath的相关使用方式
"""
from selenium import webdriver
import unittest
import time
class MyTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.driver.maximize_window()
self.base_url = "https://www.baidu.com/"
#使用id,class等属性
def test_by_xpath01(self):
driver = self.driver
driver.get(self.base_url )
try:
ele=driver.find_element_by_xpath('//*[@id="kw"]')
except Exception as e:
print("定位失败,失败原因:{}".format(e))
self.assertEqual(e, 1)
else:
print("xpath属性定位成功")
# 使用标签+属性定位避免属性名相同
def test_by_xpath02(self):
driver = self.driver
driver.get(self.base_url)
try:
ele = driver.find_element_by_xpath('//span[@class="title-content-title"]')
except Exception as e:
print("定位失败,失败原因:{}".format(e))
self.assertEqual(e, 1)
else:
print("xpath标签+属性定位成功")
ele.click()
time.sleep(3)
# 使用层级的方式
def test_by_xpath03(self):
driver = self.driver
driver.get(self.base_url)
try:
ele = driver.find_element_by_xpath('//ul[@class="s-hotsearch-content"]/li')
except Exception as e:
print("定位失败,失败原因:{}".format(e))
self.assertEqual(e, 1)
else:
print("xpath层级定位成功")
ele.click()
time.sleep(3)
# 使用层级+索引的方式 避免同一层级下面多个标签相同的元素
def test_by_xpath04(self):
driver = self.driver
driver.get(self.base_url)
try:
ele = driver.find_element_by_xpath('//ul[@class="s-hotsearch-content"]/li[1]')
except Exception as e:
print("定位失败,失败原因:{}".format(e))
self.assertEqual(e, 1)
else:
print("xpath层级+索引定位成功")
ele.click()
time.sleep(3)
# 使用and or not的方式 同时满足多个属性
def test_by_xpath05(self):
driver = self.driver
driver.get(self.base_url)
try:
ele = driver.find_element_by_xpath('//*[@id="kw"and @name="wd"]')
except Exception as e:
print("定位失败,失败原因:{}".format(e))
self.assertEqual(e, 1)
else:
print("属性and的方式定位成功")
ele.click()
time.sleep(3)
# 模糊匹配
def test_by_xpath06(self):
driver = self.driver
driver.get(self.base_url)
try:
ele = driver.find_element_by_xpath("//*[contains(text(),'新闻')]")
except Exception as e:
print("定位失败,失败原因:{}".format(e))
self.assertEqual(e, 1)
else:
print("模糊匹配定位成功")
ele.click()
time.sleep(3)
def tearDown(self):
self.driver.quit()
if __name__=="__main__":
unittest.main()