pythonselenium自动化功能测试
Posted wp950416
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pythonselenium自动化功能测试相关的知识,希望对你有一定的参考价值。
python+selenium代码测试自动化(也叫web自动化或ui自动化)
为什么要进行自动化测试?
- 原因
- 解决回归测试、压力测试、兼容性测试
- 提高测试效率保证产品质量
- 相关解释
- 回归测试:项目在发布新版本之前进行的功能验证
- 压力测试:可以理解多用户去操作软件,统计服务器处理用户请求的能力
- 兼容性测试:表示在不同浏览器下软件运行状态
- 如下三种情况一般需要使用自动化?
- 需求变动不频繁
- 项目周期长
- 项目需要回归测试
python相关设置
-
file→project Interpreter→existing interpreter→选择python的安装位置→选中python.exe
-
关闭严格模式
-
波浪线设置界面从PyCharm界面右下角的小人图标进入
-
进入波浪线设置界面看看到上方有三个设置项None、Syntax、Inspections,可以拖动箭头设置。
- None表示没有波浪线
- Syntax表示只有语法错误显示波浪线
- Inspections表示语法错误和不符合PEP8规范显示波浪线
-
-
格式化代码 ctrl+alt+l
selenium相关内容
-
元素的定位
-
id定位 find_element_by_id("kw") 注:有些id值动态变化
-
class_name定位 find_element_by_class_name("s_ipt") 注:classname有可能重复
-
tag_name定位 find_element_by_tag_name("input") 注:tagname最容易重复
-
name定位 find_element_by_name("wd") 注:name有可能重复
-
link文字精确定位 find_element_by_link_text("登录")
-
link文字模糊定位 find_element_by_partial_link_text("登")
-
CSS定位
- 标签名定位 find_element_by_css_selector("input")
- id定位 find_element_by_css_selector("#kw")
- class定位 find_element_by_css_selector(".s_ipt")
- 属性定位 find_element_by_css_selector("[name=‘wd‘]") find_element_by_css_selector("[maxlength=‘255‘]")
- 父子定位 find_element_by_css_selector("span>input")
- 组合定位 右击-复制-CSS路径 find_element_by_css_selector("input#kw") find_element_by_css_selector("input.s_ipt") find_element_by_css_selector("input[name=‘wd‘]") find_element_by_css_selector("span>input.s_ipt")
-
XPath定位 右击-复制-XPath
- 属性定位 find_element_by_xpath("//标签名[@属性=‘属性值‘]")
- 标签名定位 find_element_by_xpath("//input")
- 父子定位 find_element_by_xpath("//span/input")
- 元素内容定位 find_element_by_xpath("//标签名[contains(text(),‘内容‘)]")
- 组合定位 find_element_by_xpath("//input[@class=‘s_ipt‘ and @name=‘wd‘]")
-
-
webdriver对象的方法
-
browser.save_screenshot(‘.//baidu.png‘) 屏幕快照
-
切换窗口
""" 浏览器打开两个窗口,每个窗口都有控制句柄handles handles的值是列表list,handles[0]代表第1个窗口,handles[1]代表第2个窗口 """ handles = browser.window_handles browser.switch_to.window(handles[1]) # 切换到第2个窗口 print(browser.title) # 打印第2个窗口的标题 # 切换到frame子页面 browser.switch_to.frame(‘iframeResult‘) time.sleep(3) browser.find_element_by_xpath(‘/html/body/a‘).click() #browser.find_element_by_link_text(‘这是一个链接使用了 href 属性‘).click() time.sleep(3) # 切回父页面(必须执行) browser.switch_to.default_content() #browser.find_element_by_css_selector(‘html body a‘).click() #time.sleep(3) browser.quit()
-
警告框
browser.switch_to.frame(‘iframeResult‘) browser.find_element_by_css_selector(‘html body input‘).click() time.sleep(3) info = browser.switch_to.alert.text # 显示警告框的内容 print(info) time.sleep(3) browser.switch_to.alert.accept() # 点击确定 #browser.switch_to.alert.dismiss() # 点击取消 time.sleep(3) browser.quit()
-
下拉框
browser.switch_to.frame(‘iframeResult‘) select_element = browser.find_element_by_name(‘cars‘) Select(select_element).select_by_index(1) # 按索引选择 time.sleep(3) Select(select_element).select_by_visible_text(‘Audi‘) # 按内容选择 time.sleep(3) Select(select_element).select_by_value(‘fiat‘) # 按value属性值选择 time.sleep(3) # is_select() 记录控件是否被选中,如果被选中,则返回true;如果没被选中,则返回false. is_select = browser.find_element_by_name(‘cars‘).is_selected() if is_select == False: browser.find_element_by_name(‘cars‘).click() time.sleep(3) browser.quit()
-
悬浮框
drviver.get(‘https://www.baidu.com‘) button = drviver.find_element_by_css_selector(‘#u1>a.bri‘) # 将鼠标移至更多产品上 ActionChains(drviver).move_to_element(button).perform() # 点击音乐 drviver.find_element_by_xpath(‘/html/body/div[1]/div[1]/div/div[4]/div/div[2]/div[1]/div/a[2]/span‘).click() time.sleep(3) drviver.quit()
-
显示隐藏
from selenium import webdriver import unittest from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By class Content(unittest.TestCase): def testShow(self): self.browser = webdriver.Chrome() self.browser.get("https://www.baidu.com") self.element = WebDriverWait(self.browser, 5, 1).until(EC.presence_of_element_located((By.ID, "kw"))) self.browser.quit() def testHidden(self): self.browser = webdriver.Chrome() self.browser.implicitly_wait(5) self.browser.get("https://www.baidu.com") self.browser.quit() if __name__ == ‘__main__‘: unittest.main(verbosity=2)
-
-
常规参数化全过程用例(只有登录)
from selenium import webdriver import time import unittest import csv # 创建一个类继承unittest.TestCase class Login(unittest.TestCase): # 打开浏览器 def setUp(self) -> None: self.browser = webdriver.Chrome() self.browser.get("http://192.168.159.1:8082/") # 结束关闭浏览器 def tearDown(self) -> None: self.browser.quit() # 参数化登录信息 def login(self, username, password): self.browser.find_element_by_xpath("//*[@id=‘shop_header‘]/div[2]/ul/li[7]/a").click() time.sleep(3) self.browser.find_element_by_id("user_name").send_keys(username) self.browser.find_element_by_id("user_password").send_keys(password) self.browser.find_element_by_xpath("//*[@id=‘login_form‘]/div[4]/div/button[1]").click() time.sleep(3) def logout(self): self.browser.find_element_by_link_text(‘退出‘).click() def testLogin(self): file = open("login.csv", mode="r", encoding="utf-8") logins = csv.reader(file) for login in logins: try: username = login[0] password = login[1] self.login(username, password) self.assertTrue(self.browser.find_element_by_link_text("退出")) self.logout() except Exception as Error: print(Error) file.close() if __name__ == ‘__main__‘: unittest.main(verbosity=2)
-
改良版本全功能测试用例(缩短代码量)
# 登录模块 from selenium import webdriver import unittest import time import csv class Login(unittest.TestCase): def setUp(self) -> None: self.browser=webdriver.Chrome() self.browser.get("http://192.168.159.1:8082/") time.sleep(3) def tearDown(self) -> None: self.browser.quit() # 定义登录带参函数 def login(self,username,password): self.browser.find_element_by_xpath("//*[@id=‘shop_header‘]/div[2]/ul/li[7]/a").click() time.sleep(3) self.browser.find_element_by_id("user_name").send_keys(username) self.browser.find_element_by_id("user_password").send_keys(password) self.browser.find_element_by_xpath("//*[@id=‘login_form‘]/div[4]/div/button[1]").click() time.sleep(3) # 定义退出函数 def loginOut(self): self.browser.find_element_by_link_text("退出").click() # 登录成功测试 def testLoginSuccess(self): self.login("wupeng","123456") # 用户名为1测试 def testUserNull(self): self.login("","123456") # self.assertTrue(self.browser.find_element_by_xpath("//*[@id=‘login_form‘]/div[2]/div/label").text=="请输入会员登录名称!") info=self.browser.find_element_by_xpath("//*[@id=‘login_form‘]/div[2]/div/label").text self.assertIn("请输入会员登录名称",info) if __name__ == ‘__main__‘: unittest.main(verbosity=2) # 搜索模块 from login import dbSlogin import unittest import time class Search(unittest.TestCase): myself=dbSlogin.Login myself.setUp(myself) myself.login(myself,"wupeng","123456") # 输入正确搜索字段搜索 def testSearch(self): self.myself.browser.find_element_by_xpath("//*[@id=‘shop_top_search‘]/form/div/input").send_keys("苹果") self.myself.browser.find_element_by_xpath("//*[@id=‘shop_top_search‘]/form/div/button").click() time.sleep(3) self.myself.tearDown(self.myself) if __name__ == ‘__main__‘: unittest.main(verbosity=2)
-
生成报告
- 在测试用例文件同目录下添加9run_all_testcases.py文件
- 在测试用例文件同目录下添加HTMLTestReport.py文件
以上是关于pythonselenium自动化功能测试的主要内容,如果未能解决你的问题,请参考以下文章
Pythonselenium调用IE11浏览器,报错“找不到元素”NoSuchWindowException: Message:Unable to find element on closed w(代