找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
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()
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('')
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('')
         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()
        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)

分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册