记录用 selenium 把部分业务实现自动化测试

Object
Object
订阅者
265
文章
0
粉丝
测试交流评论148字数 797阅读2分39秒阅读模式

背景

最近换了新工作,这儿每个需求都要测 3 种语言(英语、繁体中文、简体中文),和 3 种设备(Web、IOS、AOS),一交叉就是 9 种组合。
手工测了一个多月,实在枯燥,所以想着做成自动化,可以省点时间摸鱼。

目标

短期目标是先做 Web 端的,预期要实现两个效果:文章源自玩技e族-https://www.playezu.com/181742.html

  1. 繁体中文和简体中文可以自动测(英语版本还是手工测)
  2. 每条用例都需要录屏(团队规定)

备注

因为到家就不能连公司内网了,用不了业务系统,只能自己找个别的网站练习一下,上班的时候再找机会实战。文章源自玩技e族-https://www.playezu.com/181742.html

正文

今天主要是跟着 selenium 的文档写了一个 demo,从 Getting Started 一直看到了 Elements,网址我贴这儿了:文章源自玩技e族-https://www.playezu.com/181742.html

  • Selenium Getting Started

知道了想写一个自动化脚本,要先干这些事情:文章源自玩技e族-https://www.playezu.com/181742.html

  1. 安装 selenium(selenium library)
  2. 安装浏览器驱动(drivers)
  3. 学习怎么 find elements 和 interacting with elements

漫长的阅读后,这个是 selenium 的第一个脚本,原链接我贴这儿了:文章源自玩技e族-https://www.playezu.com/181742.html

  • Selenium First Script

api 文档是这个,以后可能要经常查:文章源自玩技e族-https://www.playezu.com/181742.html

  • Selenium API

当然 First Script 我自己改了一下,写下注释加深印象,上文说的"别的网站"就用 玩技博客 好了,以下是代码。文章源自玩技e族-https://www.playezu.com/181742.html

代码

from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium import webdriver
# 这两句我从selenium文档上抄的,反正我理解是一个固定的步骤
service = ChromeService(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
def test_玩技博客_login():
# 打开这个网站的意思
    driver.get("http://玩技博客.com/")
# 拿到网站的title,再断言是不是等于"玩技博客"
    title = driver.title
print(f"网站title是:{title}")
assert title == "玩技博客"
# 文档说这是一个"placeholder",后面再查是啥作用吧
    driver.implicitly_wait(0.5)
''' selenium整体逻辑好像是:先找到这个element,然后再interact它'''
# locate elements
    # 预登录按钮
    pre_login_button = driver.find_element(By.CSS_SELECTOR, "a.btn.btn-primary.btn-jumbotron.btn-lg")
pre_login_button.click()
# 账号输入框、密码输入框、登录按钮
    account_input = driver.find_element(By.ID, "user_login")
password_input = driver.find_element(By.ID, "user_password")
login_button = driver.find_element(By.CSS_SELECTOR, "input.btn.btn-primary.btn-lg.btn-block")
# interacting with elements
    # 输入账号、输入密码、点登录按钮
    account_input.send_keys("xxxx")
password_input.send_keys("xxxx")
login_button.click()
# locate an element of user navbar,就是登录成功后,右上角那个有头像的图标,再断言这个element存不存在,假如存在就是登录成功
    user_navbar = driver.find_element(By.ID, "navbar-user-menu")
assert user_navbar.is_displayed()
print("登录成功")
# 好像每次打开chromedriver后都要quit一下,我理解也是一个固定的步骤
    driver.quit()
if __name__ == '__main__':
test_玩技博客_login()

效果图

文章源自玩技e族-https://www.playezu.com/181742.html

发现问题

  1. ChromeDriverManager 会因为没翻墙而报错(偶尔)
  2. 预登陆按钮的 classname 是个复合类,所以百度了一下,复合类要怎么定位,最后结果如代码所示

计划

周末把 selenium 的文档全部过一遍,api 多用几次,加深印象,今天写得不太利索,基本是复制黏贴改改。文章源自玩技e族-https://www.playezu.com/181742.html 文章源自玩技e族-https://www.playezu.com/181742.html

 最后更新:2024-8-21
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证