8)下拉框
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.get('file:///D:/lesson2/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E7%9A%84%E8%AF%BE%E4%BB%B6/20.11.16%E5%8F%B7-18%E5%8F%B7%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E4%B9%8B%E7%AC%AC11%E8%AE%B2%EF%BC%9A%E5%A4%9A%E6%B5%8B%E5%B8%88ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E4%B9%8Bselenium/elem/select.html')
driver.maximize_window()
s = driver.find_element_by_name('select') #定位到下拉框
第一种方式 索引值开始 是0开始
Select(s).select_by_index(3) #桔子
第二种方法
Select(s).select_by_value('banana') #香蕉
Select(s).select_by_visible_text('桃子') #桃子
9)警告型弹框
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('file:///D:/lesson2/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E7%9A%84%E8%AF%BE%E4%BB%B6/20.11.16%E5%8F%B7-18%E5%8F%B7%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E4%B9%8B%E7%AC%AC11%E8%AE%B2%EF%BC%9A%E5%A4%9A%E6%B5%8B%E5%B8%88ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E4%B9%8Bselenium/elem/alert.html')
driver.maximize_window()
alert = driver.switch_to.alert
print(alert.text)
sleep(3)
# alert.accept() #点击确定
# alert.accept() #在确定
alert.dismiss() #取消按钮
alert.accept() #取消后在确定
11)确认弹框
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('file:///D:/lesson2/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E7%9A%84%E8%AF%BE%E4%BB%B6/20.11.16%E5%8F%B7-18%E5%8F%B7%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E4%B9%8B%E7%AC%AC11%E8%AE%B2%EF%BC%9A%E5%A4%9A%E6%B5%8B%E5%B8%88ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E4%B9%8Bselenium/elem/enter.html')
driver.maximize_window()
driver.find_element_by_class_name('alert').click() #点击确认弹框
alert = driver.switch_to.alert
print(alert.text)
alert.accept() #点击确定
# alert.dismiss() #点击取消
12)输入型弹框
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('file:///D:/lesson2/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E7%9A%84%E8%AF%BE%E4%BB%B6/20.11.16%E5%8F%B7-18%E5%8F%B7%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E4%B9%8B%E7%AC%AC11%E8%AE%B2%EF%BC%9A%E5%A4%9A%E6%B5%8B%E5%B8%88ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E4%B9%8Bselenium/elem/prompt.html')
driver.maximize_window()
driver.find_element_by_class_name('alert').click()
alert = driver.switch_to.alert
sleep(3)
alert.send_keys('http://www.baidu.com')
alert.accept() #点击确定
# alert.dismiss() #点击取消
13)iframe框
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://mail.163.com/')
driver.maximize_window()
第一种方法定位iframe框
iframe = driver.find_element_by_xpath('//*[@id="loginDiv"]/iframe[1]') #定位到iframe
driver.switch_to.frame(iframe) #进入到iframe
第二种方法 ==》页面的iframe索引值,从0开始
driver.switch_to.frame(0) #进入到iframe
第三种方法
iframe = driver.find_element_by_tag_name('iframe') #iframen 标签
driver.switch_to.frame(iframe) #进入到iframe
sleep(3)
driver.find_element_by_name('email').send_keys('13923876846')
driver.find_element_by_name('password').send_keys('Duanzl888')
driver.find_element_by_id('dologin').click()
driver.switch_to.default_content() #退出iframe框
14)滚动条
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://www.jd.com')
driver.maximize_window()
#往下滑的操作
js1 = 'window.scrollTo(0,20000)'
driver.execute_script(js1)
sleep(3)
#往上滑操作
js2 = 'window.scrollTo(0,0)'
driver.execute_script(js2)
14)Keys类
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_id('kw').send_keys('pythonn')
sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE) #删除最后一个字符
sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a') #全选
sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x') #剪切
sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'v') #粘贴
sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.ENTER) #点击确定
def find_element(locator,*value):
'''
封装一个定位元素的公共方法
:param locator:
:param value:
:return:
'''
# sleep(2)# return driver.find_element_by_id(locator).send_keys(value)
if name == 'main':
find_element('kw','pythonn')
find_element('kw',Keys.BACK_SPACE)
find_element('kw', Keys.CONTROL,'a')
find_element('kw', Keys.CONTROL, 'x')
find_element('kw', Keys.CONTROL, 'v')
find_element('su', Keys.ENTER)
15)我们之前写的脚本叫作线性脚本,需要把这些封装在类里面
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://cms.duoceshi.cn/cms/manage/login.do')
driver.maximize_window()
sleep(3)
driver.find_element_by_id('userAccount').send_keys('admin')
driver.find_element_by_id('loginPwd').send_keys('123456')
driver.find_element_by_id('loginBtn').click()
需要封装在类里面
from selenium import webdriver
from time import sleep
class Cms(object):
def init(self): #构造函数
self.driver = webdriver.Chrome() #创建driver对象
self.driver.get('http://cms.duoceshi.cn/cms/manage/login.do')
self.driver.maximize_window()
self.driver.implicitly_wait(5)
def login(self):
'''
封装一个登录函数
:return:
'''
self.driver.find_element_by_id('userAccount').send_keys('admin')
self.driver.find_element_by_id('loginPwd').send_keys('123456')
self.driver.find_element_by_id('loginBtn').click()
sleep(3)
def center(self):
'''
封装一个用户中心函数
:return:
'''
self.driver.find_element_by_xpath('//*[@id="menu-user"]/dt').click()
if name == 'main':
c = Cms() #创建一个对象
c.login()
c.center()
16、为了解决用例分离的问题我们引用了unittest单元测试框架
python中有哪些框架:unittest pytest nose junit
unittest 单元测试框架的作用,最开始的作用用来做单元测试,测试用例组织和管理
我们的ui自动化用例
import unittest #导入unittest模块
class Test(unittest.TestCase):
@classmethod #装饰器
def setUpClass(cls) -> None: #类开始和类的结束只会运行一次
print('类的开始')
@classmethod
def tearDownClass(cls) -> None:
print('类的结束')
def setUp(self) -> None: #在每运行一条用例之前运行一次,创建浏览器最大化
print('方法的开始')
def tearDown(self) -> None: #在每运行一条用例之后运行一次,释放资源,关闭浏览器
print('方法的结束')
def test002(self):
print(222)
def test001(self): #unitest运行用例的顺序规则ASCII 0-9 A-Z a-z
print(111)
def test_a(self):
print(444)
def test_A(self):
print(333)
def dcs(self): #unittest 测试框架只会运行test开头的用例
print(555)
if name == 'main':
unittest.main() #unittest测试框架是运行用例的入口,main是函数,所用就是运行所有的用例
17、需求:百度搜索python和selenium
import unittest
from selenium import webdriver
from time import sleep
from dcs9_ui_auto.HTMLTestRunner3_New import HTMLTestRunner
class Baidu_Test(unittest.TestCase):
def setUp(self) -> None: self.driver = webdriver.Chrome() #创建driver对象 self.driver.get('http://www.baidu.com') self.driver.maximize_window() self.driver.implicitly_wait(5)def tearDown(self) -> None: sleep(5) self.driver.close() #退出浏览器def test01(self): self.driver.find_element_by_id('kw').send_keys('python')def test02(self): self.driver.find_element_by_id('kw').send_keys('selenium')
#把用例放进一个套件里面
def all_case():
suit = unittest.TestSuite() #创建一个suit对象,类似一个容器,用来装测试用例
# 第一种方法 单条用例# suit.addTest(Baidu_Test('test01')) #把test01这个测试用例装进suit里面# 第二种方法# suit.addTests([Baidu_Test('test01'),Baidu_Test('test02')])## return suit #把装好的用例suit套件返回给函数调用处,谁调用all_case函数,就拿到了用例
if name == 'main':
# 1、第一种运行方式
# unittest.main() #运行所有的用例
# 2、运行用例的第二种(单条用例)# runner = unittest.TextTestRunner() #根据TextTestRunner类创建一个runner对象 #然后runner对象调用run方法运行用例# runner.run(all_case())# 运行用例的第三种方法(自动化搜索用例)# 自动化搜索用例+自动运行+生成报告 defaultTestLoader 是TestLoader类的对象#discover()方法会自动化搜索特定路径中以lesson开头并且py结尾的模块中test开头的用例start_dir = 'C:\my_project\dcs\dcs9_ui_auto' #当前模块包的路径filename = start_dir+'\\ui_report.html' #生成报告的路径和名称f = open(filename,'wb') #wb 是以二进制的方式往filename 文件里面写入测试结果后的报告discover = unittest.defaultTestLoader.discover(start_dir,pattern='lesson*.py')#自动化搜索用例runner =HTMLTestRunner(stream=f,title='百度自动化测试报告', description='测试结果如下:',tester='小段')runner.run(discover)
8)下拉框
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.get('file:///D:/lesson2/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E7%9A%84%E8%AF%BE%E4%BB%B6/20.11.16%E5%8F%B7-18%E5%8F%B7%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E4%B9%8B%E7%AC%AC11%E8%AE%B2%EF%BC%9A%E5%A4%9A%E6%B5%8B%E5%B8%88ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E4%B9%8Bselenium/elem/select.html')
driver.maximize_window()
s = driver.find_element_by_name('select') #定位到下拉框
第一种方式 索引值开始 是0开始
Select(s).select_by_index(3) #桔子
第二种方法
Select(s).select_by_value('banana') #香蕉
Select(s).select_by_visible_text('桃子') #桃子
9)警告型弹框
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('file:///D:/lesson2/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E7%9A%84%E8%AF%BE%E4%BB%B6/20.11.16%E5%8F%B7-18%E5%8F%B7%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E4%B9%8B%E7%AC%AC11%E8%AE%B2%EF%BC%9A%E5%A4%9A%E6%B5%8B%E5%B8%88ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E4%B9%8Bselenium/elem/alert.html')
driver.maximize_window()
alert = driver.switch_to.alert
print(alert.text)
sleep(3)
# alert.accept() #点击确定
# alert.accept() #在确定
alert.dismiss() #取消按钮
alert.accept() #取消后在确定
11)确认弹框
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('file:///D:/lesson2/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E7%9A%84%E8%AF%BE%E4%BB%B6/20.11.16%E5%8F%B7-18%E5%8F%B7%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E4%B9%8B%E7%AC%AC11%E8%AE%B2%EF%BC%9A%E5%A4%9A%E6%B5%8B%E5%B8%88ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E4%B9%8Bselenium/elem/enter.html')
driver.maximize_window()
driver.find_element_by_class_name('alert').click() #点击确认弹框
alert = driver.switch_to.alert
print(alert.text)
alert.accept() #点击确定
# alert.dismiss() #点击取消
12)输入型弹框
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('file:///D:/lesson2/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E7%9A%84%E8%AF%BE%E4%BB%B6/20.11.16%E5%8F%B7-18%E5%8F%B7%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E4%B9%8B%E7%AC%AC11%E8%AE%B2%EF%BC%9A%E5%A4%9A%E6%B5%8B%E5%B8%88ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E4%B9%8Bselenium/elem/prompt.html')
driver.maximize_window()
driver.find_element_by_class_name('alert').click()
alert = driver.switch_to.alert
sleep(3)
alert.send_keys('http://www.baidu.com')
alert.accept() #点击确定
# alert.dismiss() #点击取消
13)iframe框
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://mail.163.com/')
driver.maximize_window()
第一种方法定位iframe框
iframe = driver.find_element_by_xpath('//*[@id="loginDiv"]/iframe[1]') #定位到iframe
driver.switch_to.frame(iframe) #进入到iframe
第二种方法 ==》页面的iframe索引值,从0开始
driver.switch_to.frame(0) #进入到iframe
第三种方法
iframe = driver.find_element_by_tag_name('iframe') #iframen 标签
driver.switch_to.frame(iframe) #进入到iframe
sleep(3)
driver.find_element_by_name('email').send_keys('13923876846')
driver.find_element_by_name('password').send_keys('Duanzl888')
driver.find_element_by_id('dologin').click()
driver.switch_to.default_content() #退出iframe框
14)滚动条
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://www.jd.com')
driver.maximize_window()
#往下滑的操作
js1 = 'window.scrollTo(0,20000)'
driver.execute_script(js1)
sleep(3)
#往上滑操作
js2 = 'window.scrollTo(0,0)'
driver.execute_script(js2)
14)Keys类
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_id('kw').send_keys('pythonn')
sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE) #删除最后一个字符
sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a') #全选
sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x') #剪切
sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'v') #粘贴
sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.ENTER) #点击确定
def find_element(locator,*value):
'''
封装一个定位元素的公共方法
:param locator:
:param value:
:return:
'''
# sleep(2)# return driver.find_element_by_id(locator).send_keys(value)
if name == 'main':
find_element('kw','pythonn')
find_element('kw',Keys.BACK_SPACE)
find_element('kw', Keys.CONTROL,'a')
find_element('kw', Keys.CONTROL, 'x')
find_element('kw', Keys.CONTROL, 'v')
find_element('su', Keys.ENTER)
15)我们之前写的脚本叫作线性脚本,需要把这些封装在类里面
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://cms.duoceshi.cn/cms/manage/login.do')
driver.maximize_window()
sleep(3)
driver.find_element_by_id('userAccount').send_keys('admin')
driver.find_element_by_id('loginPwd').send_keys('123456')
driver.find_element_by_id('loginBtn').click()
需要封装在类里面
from selenium import webdriver
from time import sleep
class Cms(object):
def init(self): #构造函数
self.driver = webdriver.Chrome() #创建driver对象
self.driver.get('http://cms.duoceshi.cn/cms/manage/login.do')
self.driver.maximize_window()
self.driver.implicitly_wait(5)
def login(self):
'''
封装一个登录函数
:return:
'''
self.driver.find_element_by_id('userAccount').send_keys('admin')
self.driver.find_element_by_id('loginPwd').send_keys('123456')
self.driver.find_element_by_id('loginBtn').click()
sleep(3)
def center(self):
'''
封装一个用户中心函数
:return:
'''
self.driver.find_element_by_xpath('//*[@id="menu-user"]/dt').click()
if name == 'main':
c = Cms() #创建一个对象
c.login()
c.center()
16、为了解决用例分离的问题我们引用了unittest单元测试框架
python中有哪些框架:unittest pytest nose junit
unittest 单元测试框架的作用,最开始的作用用来做单元测试,测试用例组织和管理
我们的ui自动化用例
import unittest #导入unittest模块
class Test(unittest.TestCase):
@classmethod #装饰器
def setUpClass(cls) -> None: #类开始和类的结束只会运行一次
print('类的开始')
@classmethod
def tearDownClass(cls) -> None:
print('类的结束')
def setUp(self) -> None: #在每运行一条用例之前运行一次,创建浏览器最大化
print('方法的开始')
def tearDown(self) -> None: #在每运行一条用例之后运行一次,释放资源,关闭浏览器
print('方法的结束')
def test002(self):
print(222)
def test001(self): #unitest运行用例的顺序规则ASCII 0-9 A-Z a-z
print(111)
def test_a(self):
print(444)
def test_A(self):
print(333)
def dcs(self): #unittest 测试框架只会运行test开头的用例
print(555)
if name == 'main':
unittest.main() #unittest测试框架是运行用例的入口,main是函数,所用就是运行所有的用例
17、需求:百度搜索python和selenium
import unittest
from selenium import webdriver
from time import sleep
from dcs9_ui_auto.HTMLTestRunner3_New import HTMLTestRunner
class Baidu_Test(unittest.TestCase):
def setUp(self) -> None: self.driver = webdriver.Chrome() #创建driver对象 self.driver.get('http://www.baidu.com') self.driver.maximize_window() self.driver.implicitly_wait(5)def tearDown(self) -> None: sleep(5) self.driver.close() #退出浏览器def test01(self): self.driver.find_element_by_id('kw').send_keys('python')def test02(self): self.driver.find_element_by_id('kw').send_keys('selenium')
#把用例放进一个套件里面
def all_case():
suit = unittest.TestSuite() #创建一个suit对象,类似一个容器,用来装测试用例
# 第一种方法 单条用例# suit.addTest(Baidu_Test('test01')) #把test01这个测试用例装进suit里面# 第二种方法# suit.addTests([Baidu_Test('test01'),Baidu_Test('test02')])## return suit #把装好的用例suit套件返回给函数调用处,谁调用all_case函数,就拿到了用例
if name == 'main':
# 1、第一种运行方式
# unittest.main() #运行所有的用例
# 2、运行用例的第二种(单条用例)# runner = unittest.TextTestRunner() #根据TextTestRunner类创建一个runner对象 #然后runner对象调用run方法运行用例# runner.run(all_case())# 运行用例的第三种方法(自动化搜索用例)# 自动化搜索用例+自动运行+生成报告 defaultTestLoader 是TestLoader类的对象#discover()方法会自动化搜索特定路径中以lesson开头并且py结尾的模块中test开头的用例start_dir = 'C:\my_project\dcs\dcs9_ui_auto' #当前模块包的路径filename = start_dir+'\\ui_report.html' #生成报告的路径和名称f = open(filename,'wb') #wb 是以二进制的方式往filename 文件里面写入测试结果后的报告discover = unittest.defaultTestLoader.discover(start_dir,pattern='lesson*.py')#自动化搜索用例runner =HTMLTestRunner(stream=f,title='百度自动化测试报告', description='测试结果如下:',tester='小段')runner.run(discover)
|
|