掘金 后端 ( ) • 2024-03-29 10:51

背景:从0开始学习自动化测试,找一个薪资10k+的工作 分享一下自己学习的过程以及遇到的疑难杂症

第一节我们讲述了如何配置环境,如果环境没有配置的同学,请先配置环境

简单上手初体验自动化测试

一、解决刚打开浏览器闪退问题

安装好环境之后我迫不及待的试了一把,用下面这段代码发现浏览器确实打开了,但是又立即关闭了。(闪退)

# 从selenium中导出 webdriver
from selenium import webdriver
driver = webdriver.Chrome()
# 打开浏览器并访问url
driver.get("https://www.baidu.com")

经过探索为webdriver加上了option,值为detach:True,解决了 闪退问题。

# 从selenium中导出 webdriver
from selenium import webdriver
driver = webdriver.Chrome()
option = webdriver.ChromeOptions()
# 为浏览器添加配置,不立即关闭
option.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=option)
# 访问url链接
driver.get("https://www.baidu.com")

二、seleinum获取元素的方法及用法

下面我们要了解一下selenium中获取页面元素的几种常用的方法: 该部分内容需要具有一点前端知识,知道如何找到元素,不懂也没关系,我来快速教你

每个页面都是由很多个标签组成的,这些标签我们也称之为元素。 我以百度的首页为大家举例讲解。 找元素的步骤:

2.1打开控制台

打开之后按f12,或者快捷键 【Ctrl+shift+C】 再或者右击点击【检查】。会弹出开发者控制台,(mac版没有f12的,先按住左下角fn,touch Bar 上会出现f12点击即可),打开控制台之后点击【Elements/元素】我们会看到如下界面。

上面的<div> <head> <body>就是标签,也就是元素。那么我们如何找到我们想要的元素呢?请接着往下看。

image.png

2.2找元素

我们打开控制台之后,会看到控制台左上角有一个箭头的按钮,没错就是它,点击一下变蓝之后就可以找元素了。我们也可以打开控制台之后按【Ctrl+shift+C】打开找元素按钮。

image.png

当然上图中的<input>中的 id、class等属性不一定是每个标签都会有的,那如果元素没有这几个属性我们该如何通过selenium来定位元素呢? 接下来邀请我们的获取元素的终极大招XPATH登场 鼠标放到你定位到的元素上,然后右键单击,点击copy,点击copy XPath就可以了~ 具体怎么用,客观请往下面看!

image.png 这里我通过不同的方式来获取【百度一下】这个按钮,别的不说,代码展示 列举几个比较常用的,其他的可以自行搜索一下用法。

  1. 通过id获取元素:
    element = driver.find_element_by_id('su')
    
  2. 通过class name获取元素:
    element = driver.find_element_by_class_name('s_btn')
    

3.通过name获取元素:

 # 因为百度一下这个标签没有name属性,我就用name代替了,找到一个带name属性的标签,替换一下
element = driver.find_element_by_name('name')
  1. 通过XPath获取元素:
    element = driver.find_element_by_xpath('//*[@id="su"]')

三、自动化测试实战

以百度的搜索举例: 我们在输入框里输入优酷,点击搜索后,找到优酷的元素,如果找到证明这条测试用例通过,找不到用例失败

from selenium import webdriver
from selenium.webdriver.common.by import By


option = webdriver.ChromeOptions()
# 为浏览器添加配置,不立即关闭
option.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=option)
# 访问url链接
driver.get("https://www.baidu.com")
# 隐式等待  访问页面时可能加载过慢,导致不能立即获取到元素,可以等待30s来等待加载
driver.implicitly_wait(30)
# 获取输入框元素
inputweb = driver.find_element(By.XPATH, '//*[@id="kw"]')
# 给输入框输入值
inputweb.send_keys("优酷")
# 获取搜索的按钮
btn = driver.find_element(By.XPATH, '//*[@id="su"]')
# 点击按钮搜索
btn.click()
try:
    # 找到优酷的元素
    ele = driver.find_element(By.XPATH, '//*[@id="1"]/div/div[1]/h3')
    print(ele)
    # 设置断言,点击后肯定会找到这个元素,如果为空,就是没有通过
    assert ele != None
    print('测试通过')
except Exception:
    print('这里出错了')
# 运行完毕后把进程清除掉
driver.quit()