如果你还想从头学起Selenium,可以看看这个系列的文章哦!

https://www.cnblogs.com/poloyy/category/1680176.html

其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...)

安装Selenium和下载Driver

安装selenium

  1. pip3 install  selenium -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

下载Driver

打开:http://npm.taobao.org/mirrors/chromedriver/

找到自己Chrome对应的版本下载即可

访问百度的小Demo

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. __title__ =
  6. __Time__ = 2020/3/25 17:00
  7. __Author__ = 小菠萝测试笔记
  8. __Blog__ = https://www.cnblogs.com/poloyy/
  9. """
  10. import time
  11.  
  12. from selenium import webdriver
  13.  
  14. # 加载浏览器驱动
  15. driver = webdriver.Chrome("../resources/chromedriver.exe")
  16.  
  17. # 访问网址
  18. driver.get("http://www.baidu.com")
  19.  
  20. # 找到搜索框
  21. inputElement = driver.find_element_by_id("kw")
  22.  
  23. # 输入搜索内容
  24. inputElement.send_keys("小菠萝测试笔记")
  25.  
  26. # 找到搜索按钮
  27. searchElement = driver.find_element_by_id("su")
  28.  
  29. # 点击搜索按钮
  30. searchElement.click()
  31.  
  32. time.sleep(5)
  33.  
  34. # 释放资源, 退出浏览器
  35. driver.quit()

可以看到,流水账式写Web自动化测试代码的顺序就是:

加载驱动 - 访问链接 - 页面操作

首先,先将一个测试html保存到本地,后续案例就按照这个页面来演示啦!

代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>小菠萝测试笔记</title>
  6. </head>
  7. <body>
  8.  
  9. <a>用户名:</a>
  10. <input id="username" class="username">
  11. <a>密码</a>
  12. <input id="password" name="password">
  13. <button class="login">登录</button>
  14. <br>
  15. <p>测试啦</p>
  16. <p>再一次测试啦</p>
  17. <br>
  18. <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-202s0"
  19. class="mnav sp dot">终极抗击肺炎啊</a>
  20. <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-2020"
  21. class="mnav sp dot">抗击肺炎</a>
  22. <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-202s0"
  23. class="mnav sp dot">抗击肺炎</a>
  24.  
  25. <div>
  26. <ul>
  27. <li class="li">111</li>
  28. <li class="li">222</li>
  29. <li class="li">333</li>
  30. </ul>
  31. <ul>
  32. <li>aaa</li>
  33. <li>bbb</li>
  34. <li>ccc</li>
  35. </ul>
  36. </div>
  37. </body>
  38. </html>

辣么,我们接下来就说下有哪些元素定位的方式呢

方式一:通过元素的id

  1. # 找到id = username的元素
  2. username = driver.find_element_by_id("username")
  3. # 输入值 张三
  4. username.send_keys("张三")
  5. # 找到od = password的元素
  6. password = driver.find_element_by_id("password")
  7. # 输入值 123
  8. password.send_keys("")

知识点

在前端,一般一个id值是唯一的,只属于一个元素

方式二:通过元素的class

  1. # =====通过 元素Class查找(仅返回匹配到的第一个)
  2. login_btn = driver.find_element_by_class_name("login")
  3.  
  4. # 点击
  5. login_btn.click()

知识点

  • 在前端,一般多个元素共用一个class
  • 但 find_element_by_class_name 只返回第一个匹配到class的元素
  • 坏处:当找不到元素则报错
  • 如果想返回所有匹配到class的元素,可看下面代码
  1. # =====找到所有class=li的元素
  2. lis = driver.find_elements_by_class_name("li")
  3. for i in lis:
  4. print(i.text)

执行结果

  1. 111
  2. 222
  3. 333

知识点

  • 返回的是一个元素列表,若只匹配到一个也是列表
  • 好处:当没有找到元素时不会报错,而是返回空列表 []

方式三:通过元素的name

  1. # =====通过 元素name查找元素(仅返回匹配到的第一个)
  2. password = driver.find_element_by_name("password")
  3.  
  4. # =====输入值 123
  5. password.send_keys("")

知识点

  • 和class一样,也有可能有多个元素共用一个name
  • 但  find_element_by_name  只返回第一个匹配到name的元素
  • 想返回多个的话,和class一样,需要调用 find_elements_by_name 方法,这里不再赘述,写法和上面一致(已标红)

方式四:通过元素标签

  1. # =====通过 元素标签(仅返回匹配到的第一个)=====
  2. p = driver.find_element_by_tag_name("p")
  3. # 打印元素的文本值
  4. print(p.text)
  5.  
  6. print("===")
  7. # =====通过 元素标签(返回匹配到的所有元素)=====
  8. ps = driver.find_elements_by_tag_name("p")
  9. for p in ps:
  10. print(p.text)

执行结果

  1. 测试啦
    ===
  2. 测试啦
  3. 再一次测试啦

知识点

  • 多个元素同种HTML标签见怪不怪了
  • 同样的, find_element_by_tag_name 返回第一个匹配到标签的元素
  • find_elements_by_tag_name 可以返回所有匹配到标签的元素

方式五:通过超链接文本

  1. # =====通过 超链接的文本查找元素(仅支持精确匹配)
  2. atext = driver.find_element_by_link_text("抗击肺炎")
  3. print(atext.text)
  4.  
  5. print("===")
  6. ass = driver.find_elements_by_link_text("抗击肺炎")
  7. for i in ass:
  8. print(i.text)

执行结果

  1. 抗击肺炎
    ===
  2. 抗击肺炎
  3. 抗击肺炎

知识点

  • find_element_by_link_text 是精确匹配,需要文本完全相同才能匹配
  • 若需要返回全部匹配到的元素,也需要用 find_elements_by_link_text

方式六:通过超链接文本(模糊匹配)

  1. # =====通过 超链接的文本查找元素(支持模糊匹配)
  2. atext = driver.find_element_by_partial_link_text("肺炎")
  3. print(atext.text)
  4.  
  5. print("===")
  6. ass = driver.find_elements_by_partial_link_text("肺炎")
  7. for i in ass:
  8. print(i.text)

执行结果

  1. 终极抗击肺炎啊
  2. ===
  3. 终极抗击肺炎啊
  4. 抗击肺炎
  5. 抗击肺炎

知识点

  • find_element_by_partial_link_text 支持模糊匹配,包含文本则匹配成功
  • 若需要返回全部匹配到的元素,也需要用  find_elements_by_partial_link_text

方式七:通过xpath(万能,重点)

  1. # ====通过 xpath
  2. lis = driver.find_element_by_xpath("/html/body/div/ul[2]/li[1]")
  3. print(lis.text)

执行结果

  1. aaa

注意: xpath 包含的知识点很多,暂时不在这篇幅展开讲,后续会单独补充详细博文哦!

方式八:通过css选择器(万能,重点)

  1. # ====通过css选择器
  2. lis = driver.find_element_by_css_selector("body > div > ul > li:nth-child(2)")
  3. print(lis.text)

执行结果

  1. 222

注意: css选择器 包含的知识点很多,暂时不在这篇幅展开讲,后续会单独补充详细博文哦!

Selenium系列(一) - 8种元素定位方式的详细解读的更多相关文章

  1. 【python+selenium的web自动化】- 8种元素定位方式详解

    ​ 我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳. ​ 说明:以下操作统 ...

  2. Appium常用的3种元素定位方式

    以最右App为例 .apk文件网盘地址: 链接:https://pan.baidu.com/s/1L4MYkhpb5ECe8XeaneTx_Q 提取码:0jqm 1.find_element_by_i ...

  3. Selenium-几种元素定位方式

    #识别元素并操作#一般有如下几种方法,其中id最为常用.这里需要注意识别元素一定要用唯一id 1.find_element_by_id("value") #! /usr/bin/e ...

  4. Selenium系列(二) - 控制浏览器操作的详细解读

    如果你还不想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识 ...

  5. Selenium系列(四) - 鼠标、键盘操作详细解读

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  6. selenium自动化测试——常见的八种元素定位方法

    selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...

  7. 关于selenium的8种元素定位

    selenium中有八种元素定位,分别是:id,name,class_name,tag_name,link_text.partial_link_text.xpath.css 简单的定位可以用 id.n ...

  8. Java + Selenium + WebDriver八大元素定位方式

    UI自动化测试的第一步就是进行元素定位,下面给大家介绍一下Selenium + WebDriver的八大元素定位方式.现在我们就以百度搜索框为例进行元素定位,如下图: 一.By.name() Java ...

  9. Selenium:八种元素定位方法

    前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...

随机推荐

  1. python js正则表达式

    一.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m 表示多行匹配JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达 ...

  2. 吴裕雄--天生自然KITTEN编程:一箭穿心

  3. Substring(Codeforces-D-拓扑排序)

    D. Substring time limit per test 3 seconds memory limit per test 256 megabytes You are given a graph ...

  4. Qt类声明中Q_OBJECT的作用与报错解决

    2017-06-22 周四 大雨 北京 院里 新建作图类,继承自QCUstomPlot类 因为需要同时作8张图,都要单坐标缩放的功能,因此想干脆新建一个类,继承自QCUstomPlot,把需要的功能都 ...

  5. Leetcode 703题数据流中的第K大元素(Kth Largest Element in a Stream)Java语言求解

    题目链接 https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/ 题目内容 设计一个找到数据流中第K大元素的类(class) ...

  6. 对BFC的深层理解

    BFC(Block Formatting Context)块级格式化上下文 注意:BFC首先是块,其次需要具备下面的条件之一才可以(通俗来说,BFC就好比一所985或者211的高校,想要成为985或者 ...

  7. Git私服搭建

    Git私服搭建 一.Git服务器搭建方式 GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信? Git支持的四种通信协议: Local(本地协议) ...

  8. 前端基础知识之HTML

    [1: What does a doctype do?] 1: doctype是html文件的第一行代码,意味着它的前面有注释都不行.所以要要写在<html>标签前面,而且它不属于html ...

  9. 使用CSS实现折叠面板总结

    任务目的 深入理解html中radio的特性 深入理解CSS选择器以及伪元素的使用 任务描述 使用input的radio单选框特性结合CSS中的伪元素实现bootstrap中折叠面板(点击查看样例), ...

  10. redis系列之------过期策略

    前言 我们都知道redis是常驻在内存当中的,因此他的效率比MySQL要快很多很多.但又引发了另外一个问题,内存从本质上讲,它是昂贵的,不能用于大量的长时间的存储,他是“不安全不稳定的“,并且有可能存 ...