jck28 - 小柒 - selenium - L2 - CSS与XPath高级定位

一, CSS高级定位

1,css 定位场景

  • 支持web产品
  • 支持app端的webview

2,css 定位的调试方法

  • 进入浏览器的console
  • 输入:
    • $("css表达式")
    • 或者$("css表达式")

3, css基础语法

image

//在console中的写法
// https://www.baidu.com/
//标签名
$('input')
//.类属性值
$('.s_ipt')
//#id属性值
$('#kw')
//[属性名='属性值']
$('[name="wd"]')

4, css关系定位

image

/在console中的写法
//元素,元素
$('.bg,.s_ipt_wr,.new-pmd,.quickdelete-wrap')
//元素>元素
$('#s_kw_wrap>input')
//元素 元素
$('#form input')
//元素+元素,了解即可
$('.soutu-btn+input')
//元素1~元素2,了解即可
$('.soutu-btn~i')

5,css 顺序关系

image

//:nth-child(n) - 它找的是ember15的第几个元素
$("#ember15>ul>li:nth-child(3)")
//:nth-of-type(n) - 当查询的元素有多个类型时,精确定位用这种
$('#form>input:nth-of-type(1)')

二, XPATH高级定位

1, xpath基本概念

  • XPath 是一门在 XML 文档中查找信息的语言
  • XPath 使用路径表达式在 XML 文档中进行导航
  • XPath 的应用非常广泛
  • XPath 可以应用在UI自动化测试

2,xpath 定位场景

  • web自动化测试
  • app自动化测试

3,xpath 定位的调试方法

  • 浏览器-console
    • $x("xpath表达式")
  • 浏览器-elements
    • ctrl+f 输入xpath或者css

4,xpath 基础语法(包含关系)

  • nodename为标签名
    image
# 整个页面
$x("/")
# 页面中的所有的子元素
$x("/*")
# 整个页面中的所有元素
$x("//*")
# 查找页面上面所有的div标签节点
$x("//div")
# 查找id属性为site-logo的节点
$x('//*[@id="site-logo"]')
# 查找节点的父节点
$x('//*[@id="site-logo"]/..')
# 查找节点的父节点的父节点
$x('//*[@id="site-logo"]/../..')

5,xpath 顺序关系(索引)

  • xpath通过索引直接获取对应元素
# 获取此节点下的所有的li元素
$x("//*[@id='ember21']//li")
# 获取此节点下【所有的节点的】第一个li元素
$x("//*[@id='ember21']//li[1]")

6, xpath 高级用法

image

# 选取最后一个input标签
//input[last()]
#选取id='main-container下最后一个div标签
//$x("//*[@id='main-container']//div[last()]")      
  
# 选取属性name的值为passward并且属性pwd的值为123456的input标签
//input[@name='passward' and @pwd='123456']
# 选取满足属性class和属性id值的标签
$x("//*[@class='topic-list-item category-studynotes ember-view' and @id='ember269']")

# 选取属性name的值为passward或属性pwd的值为123456的input标签
//input[@name='passward' or @pwd='123456']
# 选取满足属性class或者属性id值的标签
$x("//*[@class='topic-list-item category-studynotes ember-view' and @id='ember269']")

# 选取所有文本信息为'霍格沃兹测试开发'的元素
//*[text()='霍格沃兹测试开发']
# 选取所有文本信息为'每日一题0922】数字造型'的元素
$x("//*[text()='【每日一题0922】数字造型']")

# 选取所有文本信息包'霍格沃兹'的元素
//*[contains(text(),'霍格沃兹')]
# 选取所有文本信息包含'jck28 - 小柒'的元素
$x("//*[contains(text(),'jck28 - 小柒')]")