自动化测试selenium


一、测试是否可以正常运行

1、简单测试

  • 新建一个项目。
    在这里插入图片描述
  • 建立一个python包。
    在这里插入图片描述- 新建一个py文件。
  • 首先输入from selenium 等待下载selenium,如果不下载,就会出现selenium下有红线的现象。
# 导包
from selenium import webdriver
import time

# 获取 Chrome 浏览器的驱动
driver = webdriver.Chrome()
# 在 Chrome 浏览器中打开百度页面
driver.get("https://www.baidu.com/")
# 浏览器最大化
driver.maximize_window()
# 定位百度搜索输入框,然后输入想要查询的信息
driver.find_element_by_css_selector("#kw").send_keys("我在他乡挺好的")
# 定位搜索按钮,然后点击
driver.find_element_by_css_selector("#su").click()

# 页面等待时间 8s
time.sleep(8)
# 关闭浏览器
driver.quit()
  • 选择快键键 ctrl + shift + f10 就会运行。

二、元素定位

  • 要想操作一个对象,首先应该识别这个对象。
  • 定位方式有很多,但是要保证这种方式存在,且能够唯一的定位到这个元素。

1、用 id 来定位 优先选择 ※

  • 首先在 Chrome 浏览器上把鼠标放到搜索框,鼠标右击选择开发者模式(快捷键:f12),查看对应 id 名。
    在这里插入图片描述
    在这里插入图片描述
driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").click()

2、用 name 来定位

  • 在开发者模式中找到对应的name,
    在这里插入图片描述
driver.find_element_by_name("wd").send_keys("肖战演员")
driver.find_element_by_id("su").click()

3、用 class name 来定位

  • class name不唯一,容易出错。
    在这里插入图片描述
driver.find_element_by_class_name("s_ipt").send_keys("xiaozhan")
driver.find_element_by_class_name("bg s_btn").click()

4、用 link text (链接)定位

  • 有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link。
    在这里插入图片描述
driver.find_element_by_link_text("hao123").click()

5、用 partial link text (链接文字)定位

  • 通过部分链接定位,可以只用链接的一部分文字进行匹配。
driver.find_element_by_partial_link_text("新").click()

6、用 tag name (标签)定位

在这里插入图片描述

driver.find_element_by_tag_name("input").send_keys("陈情令")
driver.find_element_by_tag_name("input").click()
  • 失败,ElementNotInteractableException: element not interactable 无法交互。input 标签元素太多,无法定位。

7、用 XPath 定位 ※

  • XPath 是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,所以selenium 用户可是使用这种强大语言在web 应用中定位元素。
  • 用 id 来定位 优先选择。如果没有,使用 xpath 也可以唯一定位。
  • 熟悉前端页面也可以自己写 :// 路径, * 所有的寻找, @id 寻找 id。
    在这里插入图片描述
# 在粘贴中,注意“ ” 内是' ' ,需要修改
driver.find_element_by_xpath("//*[@id='kw']").send_keys("陈情令")
driver.find_element_by_xpath("//*[@id='su']").click()

8、用 css selector 定位

  • 当有唯一 id 用 # ,有唯一 class 用 . 。
driver.find_element_by_css_selector("#kw").send_keys("cql")
driver.find_element_by_css_selector("#su").click()

整体代码

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 浏览器最大化
driver.maximize_window()
# 用 id 来定位 优先选择  如果没有,使用 xpath 也可以唯一定位
# driver.find_element_by_id("kw").send_keys("肖战")
# driver.find_element_by_id("su").click()

# 用 name 来定位
# driver.find_element_by_name("wd").send_keys("肖战演员")
# driver.find_element_by_id("su").click()

# 用 class name 来定位  不唯一,出错
# driver.find_element_by_class_name("s_ipt").send_keys("xiaozhan")
# driver.find_element_by_class_name("bg s_btn").click()

# link text
# driver.find_element_by_link_text("hao123").click()

# 链接的文本内容 partial link text
# driver.find_element_by_partial_link_text("新").click()

# tag name  标签 ElementNotInteractableException: element not interactable 无法交互 input标签元素太多,无法定位
# driver.find_element_by_tag_name("input").send_keys("陈情令")
# driver.find_element_by_tag_name("input").click()

# xPath //路径   *所有的寻找   @id寻找id
# driver.find_element_by_xpath("//*[@id='kw']").send_keys("陈情令")
# driver.find_element_by_xpath("//*[@id='su']").click()

# css  id用#号  如果有唯一class是.号
driver.find_element_by_css_selector("#kw").send_keys("cql")
driver.find_element_by_css_selector("#su").click()

time.sleep(6)
driver.quit()

三、操作测试对象

1、click 点击对象

  • click() 用于点击一个按钮。

2、send_keys 在对象上模拟按键输入

  • send_keys(“xx”) 用于在一个输入框里输入xx 内容。

3、clear 清除对象的内容(如果可以的话)

  • clear() 用于清除输入框的内容。
  • 比如百度输入框里默认有个“请输入关键字”的信息。
  • 比如我们的登陆框一般默认会有“账号”“密码”这样的默认信息,clear 可以帮助我们清除这些信息。
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_css_selector("#kw").send_keys("我在他乡挺好的")
driver.find_element_by_css_selector("#su").click()
time.sleep(6)

# 清除信息  先定位
driver.find_element_by_id("kw").clear()
time.sleep(5)

# 在搜索其他信息
driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").click()
time.sleep(6)

driver.quit()

4、submit 提交表单

  • 把“百度一下”的操作从click 换成submit 可以达到相同的效果(在该页面唯一,与 click 作用一致)。
driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").submit()

5、text 用于获取元素的文本信息

  • text 用于获取元素的文本信息。
    在这里插入图片描述
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()

# 获取元素内容
text = driver.find_element_by_id("bottom_layer").text
print(text)

driver.quit()

在这里插入图片描述

四、添加等待

  • 添加休眠非常简单,我们需要引入time 包,就可以在脚本中自由的添加休眠时间。
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()

driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").click()

# 找到肖战,跳转到肖战的百度百科界面
driver.find_element_by_link_text("百度百科").click()
# 没有找到,在资源没加载出来,就去寻找资源,导致没有变化

time.sleep(6)
# close 关闭浏览器   quit 不仅关闭浏览器,还可以清除缓存垃圾
driver.quit()

所以在这时就需要添加一个等待。

1、固定等待 time.sleep()

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()

driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").click()

# 加一个等待
# 固定等待,让页面 等待 规定的时间 10s ,在 10s后在查找肖战的百度百科,
time.sleep(10)

driver.find_element_by_link_text("百度百科").click()

time.sleep(6)
driver.quit()

2、智能等待 implicitly_wait()

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()

driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").click()

# 加一个等待
# 智能等待 ,当页面加载出来后就直接跳转, 下面的意思是最多等10秒  但是在10s后没有加载出来后就会报错
driver.implicitly_wait(10)

driver.find_element_by_link_text("百度百科").click()

time.sleep(6)
driver.quit()

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>