安装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. __title__ =
  5. __Time__ = 2020/3/25 17:00
  6. __Author__ = 小菠萝测试笔记
  7. __Blog__ = https://www.cnblogs.com/poloyy/
  8. """
  9. import time
  10. from selenium import webdriver
  11. # 加载浏览器驱动
  12. driver = webdriver.Chrome("../resources/chromedriver.exe")
  13. # 访问网址
  14. driver.get("http://www.baidu.com")
  15. # 找到搜索框
  16. inputElement = driver.find_element_by_id("kw")
  17. # 输入搜索内容
  18. inputElement.send_keys("小菠萝测试笔记")
  19. # 找到搜索按钮
  20. searchElement = driver.find_element_by_id("su")
  21. # 点击搜索按钮
  22. searchElement.click()
  23. time.sleep(5)
  24. # 释放资源, 退出浏览器
  25. 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. <a>用户名:</a>
  9. <input id="username" class="username">
  10. <a>密码</a>
  11. <input id="password" name="password">
  12. <button class="login">登录</button>
  13. <br>
  14. <p>测试啦</p>
  15. <p>再一次测试啦</p>
  16. <br>
  17. <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-202s0"
  18. class="mnav sp dot">终极抗击肺炎啊</a>
  19. <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-2020"
  20. class="mnav sp dot">抗击肺炎</a>
  21. <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-202s0"
  22. class="mnav sp dot">抗击肺炎</a>
  23. <div>
  24. <ul>
  25. <li class="li">111</li>
  26. <li class="li">222</li>
  27. <li class="li">333</li>
  28. </ul>
  29. <ul>
  30. <li>aaa</li>
  31. <li>bbb</li>
  32. <li>ccc</li>
  33. </ul>
  34. </div>
  35. </body>
  36. </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("123")

知识点

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

方式二:通过元素的class

  1. # =====通过 元素Class查找(仅返回匹配到的第一个)
  2. login_btn = driver.find_element_by_class_name("login")
  3. # 点击
  4. 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. # =====输入值 123
  4. password.send_keys("123")

知识点

  • 和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. print("===")
  6. # =====通过 元素标签(返回匹配到的所有元素)=====
  7. ps = driver.find_elements_by_tag_name("p")
  8. for p in ps:
  9. 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. print("===")
  5. ass = driver.find_elements_by_link_text("抗击肺炎")
  6. for i in ass:
  7. 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. print("===")
  5. ass = driver.find_elements_by_partial_link_text("肺炎")
  6. for i in ass:
  7. 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)
  4. 执行结果

执行结果

  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选择器 包含的知识点很多,暂时不在这篇幅展开讲,后续会单独补充详细博文哦!

转载:https://www.cnblogs.com/poloyy/p/12568983.html