Cyan Blog Cyan Blog
首页
  • Java (opens new window)
  • JUC (opens new window)
  • JVM (opens new window)
  • Redis

    • Redis安装 (opens new window)
    • Redis基础 (opens new window)
    • Redis实战 (opens new window)
    • Redis集群安装 (opens new window)
    • Redis分布式缓存 (opens new window)
    • Redis多级缓存 (opens new window)
    • Redis原理 (opens new window)
  • 管理工具

    • Maven (opens new window)
    • Git (opens new window)
  • SSM

    • Spring (opens new window)
    • SpringBoot (opens new window)
    • Mybatis (opens new window)
    • MybatisPlus (opens new window)
  • 微服务

    • Docker (opens new window)
    • RabbitMQ (opens new window)
    • SpringCloud (opens new window)
    • Dubbo (opens new window)
    • MongoDB (opens new window)
    • Zookeeper (opens new window)
  • Java面试题 (opens new window)
  • JUC面试题 (opens new window)
  • JVM面试题 (opens new window)
  • Linux面试题 (opens new window)
  • SQL面试题 (opens new window)
  • Maven面试题 (opens new window)
  • Redis面试题 (opens new window)
  • SSM面试题 (opens new window)
  • SpringCloud面试题 (opens new window)
  • Linux (opens new window)
  • C++ (opens new window)
  • 数据库

    • MySQL (opens new window)
    • NoSQL (opens new window)
  • 软件测试

    • 软件测试 (opens new window)
  • 加密解密 (opens new window)
  • bilibili字幕提取 (opens new window)
  • 道理 (opens new window)
  • 关于博主

    • Github (opens new window)
    • CSDN (opens new window)
  • 关于本站

    • 如何搭建博客网站 (opens new window)
首页
  • Java (opens new window)
  • JUC (opens new window)
  • JVM (opens new window)
  • Redis

    • Redis安装 (opens new window)
    • Redis基础 (opens new window)
    • Redis实战 (opens new window)
    • Redis集群安装 (opens new window)
    • Redis分布式缓存 (opens new window)
    • Redis多级缓存 (opens new window)
    • Redis原理 (opens new window)
  • 管理工具

    • Maven (opens new window)
    • Git (opens new window)
  • SSM

    • Spring (opens new window)
    • SpringBoot (opens new window)
    • Mybatis (opens new window)
    • MybatisPlus (opens new window)
  • 微服务

    • Docker (opens new window)
    • RabbitMQ (opens new window)
    • SpringCloud (opens new window)
    • Dubbo (opens new window)
    • MongoDB (opens new window)
    • Zookeeper (opens new window)
  • Java面试题 (opens new window)
  • JUC面试题 (opens new window)
  • JVM面试题 (opens new window)
  • Linux面试题 (opens new window)
  • SQL面试题 (opens new window)
  • Maven面试题 (opens new window)
  • Redis面试题 (opens new window)
  • SSM面试题 (opens new window)
  • SpringCloud面试题 (opens new window)
  • Linux (opens new window)
  • C++ (opens new window)
  • 数据库

    • MySQL (opens new window)
    • NoSQL (opens new window)
  • 软件测试

    • 软件测试 (opens new window)
  • 加密解密 (opens new window)
  • bilibili字幕提取 (opens new window)
  • 道理 (opens new window)
  • 关于博主

    • Github (opens new window)
    • CSDN (opens new window)
  • 关于本站

    • 如何搭建博客网站 (opens new window)
  • 设计模式

  • 软件测试

  • 软件测试实验

    • 软件测试
    • WebDriver⭐⭐
    • 定位⭐⭐
      • 普通定位类型(定位方法、定位策略)
      • XPATH高级定位
      • CSS选择器高级定位
      • 小结:定位方法
    • 浏览器操作⭐
    • 元素基本操作⭐⭐
    • 模拟键鼠操作⭐⭐
    • 消息框操作⭐
    • 切换浏览器窗口⭐
    • SoftwareTest⭐
    • SoftwareTest
    • SoftwareTest
    • SoftwareTest
    • SoftwareTest
  • 计算机
  • 软件测试实验
2025-03-17
0
0
目录

定位⭐⭐

  • 1.ID, 2.NAME, 3.LINK_TEXT, 4.PARTIAL_LINK_TEXT, 5.CLASS_NAME, 6.TAG_NAME, 7.XPATH, 8.CSS选择器

  • find_element查找单个元素,find_elements查找多个元素

  • 刷新后需要重新定位

# 普通定位类型(定位方法、定位策略)

1、ID定位:有id属性,建议用id属性值进行定位。(最推荐)

  • driver.find_element(By.ID,'keyword').send_keys('100')#找到搜索按钮前面的那一个文本框(关键字文本框),输入100

2、NAME定位:没有id属性时,也可以使用name属性值定位元素。(次推荐)

  • driver.find_element(By.NAME,'imageField').click()#找到“搜索”按钮,点击它

3、LINK_TEXT ---链接文本定位

  • 只用于定位超级链接(<a……),并且<a……>与之间存在较短的文本的情况。

  • 要求定位数据必须与<a……>与之间文本完全一致。(相等、精确匹配)

  • driver.find_element(By.LINK_TEXT,'高级搜索').click()#找到文本是“高级搜索”的超级链接,点击它

4、PARTIAL_LINK_TEXT ---部分链接文本定位

  • 只用于定位超级链接(<a……),并且<a……>与之间存在较长的文本的情况。
  • <a……>与之间文本只要包含定位数据就可以定位到。(包含、模糊匹配)

5、CLASS_NAME: 定位Class属性值定位元素

  • driver.find_element(By.CLASS_NAME,'bnt_blue_2').click()#找到一个类名是bnt_blue_2的“查询该订单号”的按钮,点击它

6、TAG_NAME: 定位标签名

  • driver.find_element(By.TAG_NAME,'textarea').send_keys('111')#找到标签名是textarea的文本域,输入111

# XPATH高级定位

7、XPATH: 定位xpath表达式

  • 方式一:复制得到xpath表达式,在开发者工具中右键复制xpath表达式

    • driver.find_element(By.XPATH,'/html/body/div[7]/div[2]/div[4]/div/div/form/table/tbody/tr[3]/td[2]/input[3]').click()#点击一个元素(这个目标元素是“询问”后的单选按钮)
  • 方式二:自己书写xpath表达式(需要熟悉xpath表达式的语法)

    • 绝对路径xpath:以/开头,从html这个根节点(最顶层节点)开始描述路径。---不容易后期维护,所以建议少用!

      • /html/body/div[7]/div[2]/div[4]/div/div/form/table/tbody/tr[3]/td[2]/input[3]
    • 相对路径xpath:以//开头,不从html这个根节点开始描述,从其他层次开始描述。---维护性好,建议使用!

相对路径

  • //标记名
    • driver.find_element(By.XPATH,'//textarea').send_keys('222')#找到标签名是textarea的文本域,输入222
  • //父标记名/子标记名
    • driver.find_element(By.XPATH,'//form/a').click()#点击form标记下级的a元素(当前网页里就是“高级搜索”)
  • //标记名称[筛选条件]
    • 筛选条件的多种写法常用的有:[索引号]、[@属性名="属性值"]

    • 索引号代表同父(同级别)下同标记的兄弟节点中目标节点是第几个,这个整数从1开始排序。

      • driver.find_element(By.XPATH,'//form/input[1]').send_keys('100')#向form这个父元素下级的第1个input标记的子元素(目前就是:关键字文本框)里输入100
    • [@属性名="属性值"] 是用属性值的精确匹配来进行元素的筛选,在xpath里属性可以是任何你在html格式的网页源代码里看到的属性,不限于id、name、class。

      • driver.find_element(By.XPATH,'//a[@href="pick_out.php"]').click()#找一个href属性值等于pick_out.php的元素,点击它。注意:引号不要里外冲突!!!
    • [text()="文本"]:是用标记名的文本与指定文本比较来进行元素的筛选

      • text()无参,可以获得<标记名……>与它自己的</标记名>之间的完整文本(元素的文本,str类型),标记名可以是任何标记名(包括a)。
      • driver.find_element(By.XPATH,'//a[text()="文本"]').click()#找一个匹配文本的超级链接,点击它
    • [标签名="文本"]:是用标子记名的文本与指定文本比较来进行元素的筛选

      • driver.find_element(By.XPATH,'//a[strong="文本"]').click()#找一个匹配strong标签的文本的超级链接,点击它
  • [contains(text(),"字符串")], Xpath语法里的contains函数:用来描述包含关系。包含关系(模糊匹配)
    • driver.find_element(By.XPATH,'//img[contains(@src,"bnt_reg")]').click()#找一个src属性值里包含bnt_reg的图片(img、就是“注册”这个元素),点击它
    • driver.find_element(By.XPATH,'//a[contains(text(),"高级")]').click()#找到文本里包含“高级”的超级链接(就是“高级搜索”),点击它
driver.find_element(By.ID, 'username').send_keys('cyan')
driver.find_element(By.NAME, 'extend_field1').send_keys('123@hotmail.com')
driver.find_element(By.LINK_TEXT, '查看购物车').click()

driver.find_element(By.XPATH, '//a[contains(@href,"register")]').click()
driver.find_element(By.XPATH, '//a[@href="user.php"]').click()
driver.find_element(By.XPATH, '//td/select/option[5]').click()
driver.find_element(By.XPATH, '//div[@class="goodsItem"]/a[1]').click()
driver.find_element(By.XPATH, '//a[text()="高级搜索"]').click()
driver.find_element(By.XPATH, '//img[@alt="夏新N7"]').click()

# CSS选择器高级定位

1、复制得到CSS选择器

  • 开发者工具右键复制CSS选择器

  • CSS选择器定位语法:

    • driver.find_element(By.CSS_SELECTOR,'CSS选择器')

    • driver.find_element(By.CSS_SELECTOR,'#ECS_MEMBERZONE > a:nth-child(2) > img:nth-child(1)').click()#点击“登录”

2、#id属性值

  • driver.find_element(By.CSS_SELECTOR,'#keyword')

3、.class 类名

  • driver.find_element(By.CSS_SELECTOR,'.go')

4、[属性名=”属性值”] ---所有属性都可用

  • 注意:属性名前不写@

  • driver.find_element(By.CSS_SELECTOR,'[href="pick_out.php"]')

5、标记名 ---找该标记名的元素

  • driver.find_element(By.CSS_SELECTOR,'textarea')

6、组合使用上述选择条件

  • 标记名写在开头

  • input.inputBg[name="user_email"][type="text"]

7、父>子 ---逐级向下查找

  • form>a
  • div>form>a
  • form#searchForm>a

8、祖先 后代 ---跳级向下查找(英文空格)

  • div#search a

9、标记名:first-child 、标记名:nth-child(索引号) 、标记名:last-child ---第几个子元素(从1开编号的整数)

  • div#mainNav>a:nth-child(3)
xpath表达式 css选择器
//div/input[1] div>input:first-child
//div/input[2] div>input:nth-child(2)
//div/a[1] div>a:nth-child(3)
//div/a[2] div>a:nth-child(4)
//div/input[3] div>input:nth-child(5)
//div/a[3] div>a:last-child
driver.find_element(By.CSS_SELECTOR,'a[href="message.php"]').click()

driver.find_elements(By.CSS_SELECTOR,'input.inputBg')[0].send_keys('vip@163.com')
list = driver.find_elements(By.CSS_SELECTOR,'input[name="msg_type"]')
a = list[2]
if not a.is_selected():
    a.click();
sleep(2)
driver.find_element(By.CSS_SELECTOR,'td>input[name="msg_title"]').send_keys('维修')
driver.find_element(By.CSS_SELECTOR,'textarea').send_keys('手机坏了怎么处理?')
driver.find_element(By.CSS_SELECTOR,'input.bnt_blue_1').click()

# 小结:定位方法

  • driver.find_element(By.ID,’id属性值’)
  • driver.find_element(By.NAME,’name属性值’)
  • driver.find_element(By.LINK_TEXT,’完整链接文本’)
  • driver.find_element(By.PARTIAL_LINK_TEXT,’一部分链接文本’)
  • driver.find_element(By.CLASS_NAME,’类名’)
  • driver.find_element(By.TAG_NAME,’标记名’)
  • driver.find_element(By.XPATH,’xpath表达式’)
  • driver.find_element(By.CSS_SELECTOR,’css选择器’)

#

#软件测试
上次更新: 2025/5/2 14:40:28
WebDriver⭐⭐
浏览器操作⭐

← WebDriver⭐⭐ 浏览器操作⭐→

最近更新
01
项目优化
05-06
02
项目优化
05-06
03
延迟消息
05-05
更多文章>
Theme by Vdoing | Copyright © 2025-2025 Cyan Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式