学习笔记:
前言
本文采用视频用来学习记录
附上视频链接
一、python自动化测试?
二、学习记录
1.简单selenium访问百度代码
# 调用安装好的selenium模块
from time import sleep
from selenium import webdriver
# 去掉小黄条
option=webdriver.ChromeOptions()
option.add_argument('disable-infobars')
# 在后端静默运行的模式,没有将浏览器页面跳转出来
# 无头模式的添加
# option.add_argument('headless')
# 生成一个chromedriver
driver = webdriver.Chrome()
# 访问指定的url
driver.get("http://www.baidu.com")
print(driver.title)
# 输入关键字
driver.find_element_by_id('kw').send_keys("软件测试")
# 点击百度一下按钮
driver.find_element_by_id('su').click()
# 等待
sleep(2)
# 点击第一条链接
driver.find_element_by_xpath('//*[@id="5"]/h3/a').click()
如何获取元素id
打开百度网址
https://www.baidu.com/
点击左边
按钮
将鼠标放在输入框中
可以看出id为kw
同样 点击左边
按钮
将鼠标放在搜索按钮上
可以查看到id为su
然后点击百度文库的网址跳转
如何找到百度文库的网址
同样在百度上输入关键字‘软件测试’ ,进入开发者模式,点击左边
按钮,找到要跳转的网页
单击
获取到xpath
2.关键字+unitTest实现自动化测试框架
环境
一个访问百度的简单框架
目录结构:
在
中的代码:
import unittest
from time import sleep
from ddt import ddt,data,unpack
from web_ui.test_keyword_demo import TestKeyWords
# 实现管理测试用例,数据驱动
# 装饰器
@ddt
class TestForKey(unittest.TestCase):
# 前置条件
def setUp(self) -> None:
self.tk = TestKeyWords('http://www.baidu.com', 'chrome')
print('setUp')
# 后置条件
def tearDown(self) -> None:
self.tk.quit_browser()
print('tearDown')
# 测试用例1
@data(['id','软件测试'], ['id','软件开发'])
@unpack
# *元组的形式
# **表示字典,基于键值对
def test_1(self, locator,input_value):
self.tk.input_text(locator, 'kw', input_value)
self.tk.click_element('id', 'su')
sleep(3)
# @data('软件测试', '软件开发')
# def test_1(self,input_value):
# self.tk.input_text('id', 'kw', input_value)
# self.tk.click_element('id', 'su')
# sleep(3)
# # 测试用例2
# def test_2(self):
# self.tk.input_text('id', 'kw', '软件开发')
# self.tk.click_element('id', 'su')
# sleep(3)
if __name__ == '__main__':
unittest.main()
在
中的代码
# 导包
from selenium import webdriver
class TestKeyWords(object):
# 初始化
def __init__(self,url,browser_type):
self.driver=self.open_brower(browser_type)
self.driver.get(url)
#调用浏览器
def open_brower(self, browser_type):
if browser_type == 'chrome':
driver=webdriver.Chrome()
return driver
elif browser_type == 'firefox':
driver=webdriver.Firefox()
return driver
else:
print('type error')
# 定位元素
def locator(self,locator_type,value):
if locator_type=='xpath':
el=self.driver.find_element_by_xpath(value)
return el
elif locator_type=='id':
el=self.driver.find_element_by_id(value)
return el
elif locator_type=='name':
el=self.driver.find_element_by_name(value)
return el
# 输入
def input_text(self, locator_type,value,text):
self.locator(locator_type,value).send_keys(text)
# 点击
def click_element(self,locator_type,value):
self.locator(locator_type,value).click()
# 关闭浏览器,释放资源
def quit_browser(self):
self.driver.quit()
# 套用到任何网站
# 开源自动化测试框架
if __name__ == '__main__':
tk=TestKeyWords('http://www.baidu.com','chrome')
tk.input_text('id','kw','软件测试')
tk.click_element('id','su')
# tk = TestKeyWords('http://www.jd.com', 'chrome')
# tk.input_text('id', 'key', '软件测试')
# tk.click_element('xpath', '//*[@id="search"]/div/div[2]/button')
3. PO模式设计实现自动化测试框架
一个百度页面的关键字+unitTest自动化测试框架
项目目录:
中的代码实现:
# 基本类
from selenium import webdriver
# 定义一个driver对象
class BasePage(object):
# 构造函数
def __init__(self,driver):
self.driver=driver
# 元素定位,使用元组
def locator(self,locator):
return self.driver.find_element(*locator)
# 关闭浏览器
def quit_brower(self):
self.driver.quit()
# 访问
def visit(self,url):
self.driver.get(url)
中代码的实现:
from selenium import webdriver
from selenium.webdriver.common.by import By
# Python的模块名与类名是在两个不同的名字空间中,初学者很容易将其弄混淆。比如你在交...
# 以页面做为对象
from basePage.base_page import BasePage
class SearchPage(BasePage):
input_id = (By.ID, 'kw')
click_id = (By.ID, 'su')
# def input_text(self, locator,input_text):
# self.locator(locator).send_keys(input_text)
#
# def click_element(self,locator):
# self.locator(locator).click()
def input_text(self, input_text):
self.locator(self.input_id).send_keys(input_text)
def click_element(self):
self.locator(self.click_id).click()
if __name__ == '__main__':
url='http://www.baidu.com'
driver=webdriver.Chrome()
sp=SearchPage(driver)
sp.visit(url)
sp.input_text('软件测试')
sp.click_element()
优化一点将
中的代码改为:
from selenium import webdriver
from selenium.webdriver.common.by import By
# Python的模块名与类名是在两个不同的名字空间中,初学者很容易将其弄混淆。比如你在交...
# 以页面做为对象
from basePage.base_page import BasePage
# SearchPage类集成于BasePage这个类
class SearchPage(BasePage):
#搜索框元素
input_id = (By.ID, 'kw')
# 百度一下按钮
click_id = (By.ID, 'su')
# def input_text(self, locator,input_text):
# self.locator(locator).send_keys(input_text)
#
# def click_element(self,locator):
# self.locator(locator).click()
# 对输入框进行对内容的输入
def input_text(self, input_text):
self.locator(self.input_id).send_keys(input_text)
# 点击一下百度一下按钮,实现本次搜索,操作节点
def click_element(self):
self.locator(self.click_id).click()
# 定义一个调试检验的函数
def check(self,url,input_text):
self.visit(url)
self.input_text(input_text)
self.click_element()
if __name__ == '__main__':
url='http://www.baidu.com'
driver=webdriver.Chrome()
sp=SearchPage(driver)
sp.check(url,'软件测试')
# sp.visit(url)
# sp.input_text('软件测试')
# sp.click_element()
执行成功
添加unittest管理测试用例
创建
其中
的代码为:
import unittest
from pageObject.search_page import SearchPage
from ddt import ddt,data,unpack
from selenium import webdriver
from time import sleep
@ddt()
class TestCases(unittest.TestCase):
# 前置条件
def setUp(self) -> None:
driver = webdriver.Chrome()
self.sp = SearchPage(driver)
# 后置条件
def tearDown(self) -> None:
self.sp.quit_brower()
# 测试用例1
@data(['http://www.baidu.com','软件测试'],['http://www.baidu.com','软件开发'])
@unpack
def test_1(self,url,input_text):
self.sp.check(url,input_text)
sleep(3)
if __name__ == '__main__':
unittest.main()
运行成功