app开发定制Selenium自动化测试框架

一.Selenium概述

1.1 app开发定制什么是框架? 

  1.     框架(framework)app开发定制是一个框子——app开发定制指其约束性,app开发定制也是一个架子——app开发定制指其支撑性。app开发定制是一个基本概念上的
  2. app开发定制结构用于去解决或者处理复杂的问题。
  3.   框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义
  4. 认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
  5. 框架,其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用
  6. 别人搭好的舞台,你来做表演。

1.2 为什么使用框架?

  1. 1)自己从头实现太复杂
  2. 2)使用框架能够更专注于业务逻辑,加快开发速度
  3. 3)框架的使用能够处理更多细节问题
  4. 4)使用人数多,稳定性,扩展性好

1.3 Selenium 工作原理

二.Selenium API基础

1. 前提操作

(1)导入库

from selenium import webdriver

(2)创建浏览器对象

  1. driver=webdriver.Chrome() #创建浏览器对象 谷歌浏览器
  2. driver.get('https://www.baidu.com/') #访问网址 百度

2.方法

我们需要使用dir()来查看方法

print(dir(driver)) 

 (1) 调整浏览器的尺寸

  1. driver.maximize_window() #窗口最大化
  2. print(driver.get_window_size()) #获取浏览器尺寸 {'height': 1020, 'width': 945}
  3. driver.set_window_size(width='1200',height='1000') #设置浏览器尺寸

(2) 调整浏览器的位置

  1. print(driver.get_window_position()) #获取浏览器位置 {'x': 10, 'y': 10}
  2. print(driver.set_window_position(100,100)) #设置浏览器位置

(3) 获取当前页面的url 

print(driver.current_url)   #https://www.baidu.com/

(4) 获取当前页面的title

print(driver.title)   #百度一下,你就知道

(5) 刷新页面

driver.refresh()

(6) 返回上一页/下一页

  1. driver.back() #上一页
  2. driver.forward() #下一页

(7) 保存图片

  1. # 方式一:
  2. data=driver.get_screenshot_as_png()
  3. with open('111.jpg','wb') as f:
  4. f.write(data)
  5. # 方式二:
  6. driver.get_screenshot_as_file('222.jpg')

(8) 查看网页源码

print(driver.page_source)

 (9) 关闭网页

  1. driver.close() #关闭当前页面
  2. driver.quit() #关闭所有页面

3. 元素定位

  1. # 方式一: driver.find_element_by_xxx(value)
  2. # 方式二:driver.find_element(By.xxx,value)
  3. # 1.id
  4. input=driver.find_element_by_id('kw')
  5. input.send_keys(12306)
  6. # 2.class
  7. input=driver.find_element_by_class_name('s_ipt')
  8. input.send_keys(12306)
  9. # 3.name
  10. input=driver.find_element_by_name('wd')
  11. input.send_keys(12306)
  12. # 4.xpath
  13. input=driver.find_element_by_xpath('//*[@id="kw"]')
  14. input.send_keys(12306)
  15. # 5.css
  16. input=driver.find_element_by_css_selector('#kw')
  17. input.send_keys(12306)
  18. # 6.link_text 全匹配
  19. news=driver.find_element_by_link_text('新闻')
  20. news.click()
  21. # 7.partial_link_text 模糊匹配
  22. news=driver.find_element_by_partial_link_text('闻')
  23. news.click()
  24. # 8.tag name 标签名
  25. put=driver.find_element_by_tag_name("span")
  26. put.click()

三.Selenium API高级

3.1 页面跳转

  1. from selenium import webdriver
  2. driver=webdriver.Chrome()
  3. driver.get('http://bj.58.com')
  4. # 获取当前页面的句柄
  5. h1=driver.window_handles
  6. print('58同城:',h1)
  7. # 定位元素 宠物
  8. a=driver.find_element_by_link_text('宠物')
  9. # 点击宠物
  10. a.click()
  11. # 获取点击跳转之后的句柄
  12. h2=driver.window_handles
  13. print('宠物:',h2)
  14. # 跳转句柄
  15. driver.switch_to.window(h2[1])
  16. # 定位元素 宠物狗
  17. dog=driver.find_element_by_xpath('/html/body/div[3]/div[1]/dl[1]/dd[1]/a/strong')
  18. # dog=driver.find_element_by_link_text('宠物狗')
  19. dog.click()
  20. # 获取点击跳转之后的句柄
  21. h3=driver.window_handles
  22. print('宠物狗:',h3)
  23. # 跳转句柄
  24. driver.switch_to.window(h3[2])
  25. # 定位元素
  26. small=driver.find_element_by_css_selector('#selection > dl:nth-child(1) > dd > a:nth-child(6)')
  27. small.click()

3.2 表单跳转

  1. from selenium import webdriver
  2. import time
  3. driver=webdriver.Chrome()
  4. driver.get('https://qzone.qq.com/') #访问qq空间页面
  5. driver.maximize_window() #窗口最大化
  6. #定位表单
  7. frame=driver.find_element_by_id('login_frame')
  8. # 表单跳转
  9. driver.switch_to.frame(frame)
  10. time.sleep(2)
  11. # 点击密码登录
  12. driver.find_element_by_link_text('密码登录').click()
  13. time.sleep(2)
  14. # 输入账号
  15. driver.find_element_by_id('u').send_keys('1720003909')
  16. time.sleep(2)
  17. # 输入密码
  18. driver.find_element_by_id('p').send_keys('xqy20001220')
  19. time.sleep(2)
  20. # 点击登录
  21. driver.find_element_by_id('login_button').click()
  22. # 关闭页面
  23. driver.close()

3.3 弹出框操作

  1. #进入弹出框
  2. driver.switch_to.alert
  3. #接收警告
  4. accept()
  5. #解散警告
  6. dismiss()
  7. #发送文本到警告框
  8. send_keys(data)

代码:

  1. from selenium import webdriver
  2. import time
  3. driver=webdriver.Chrome()
  4. driver.get('https://www.baidu.com/')
  5. # 定位 设置
  6. set=driver.find_element_by_id('s-usersetting-top')
  7. set.click()
  8. # 定位 搜索设置
  9. search=driver.find_element_by_xpath('//*[@id="s-user-setting-menu"]/div/a[1]/span')
  10. search.click()
  11. # 定位 每页20条
  12. page=driver.find_element_by_xpath('/html/body/div[1]/div[6]/div/div/div/div[1]/form/div/ul/li[3]/span[2]/span[2]/label')
  13. page.click()
  14. # 定位 保存设置
  15. save=driver.find_element_by_css_selector('#se-setting-7 > a.prefpanelgo.setting-btn.c-btn.c-btn-primary')
  16. save.click()
  17. time.sleep(2)
  18. driver.switch_to.alert.accept() #弹框处理
  19. # driver.switch_to.alert.dissmiss() #弹框处理

3.4 滚动条操作

  1. from selenium import webdriver
  2. import time
  3. driver=webdriver.Chrome()
  4. driver.get('http://bj.58.com')
  5. time.sleep(3)
  6. # 滚动条到底部
  7. # js="var q=document.documentElement.scrollTop=10000"
  8. js = "window.scrollTo(0,document.body.scrollHeight)"
  9. driver.execute_script(js) #执行js
  10. time.sleep(3)
  11. # 顶部
  12. js="window.scrollTo(0,0)"
  13. driver.execute_script(js)
  14. time.sleep(3)
  15. # 移动到指定元素
  16. target = driver.find_element_by_xpath('/html/body/div[3]/div[1]/div[1]/div/div[2]/div[2]/a[13]') #定位移动到的元素
  17. driver.execute_script("arguments[0].scrollIntoView();", target)
  18. target.click()

3.5 鼠标键盘操作

  1. from selenium import webdriver
  2. from selenium.webdriver import ActionChains #鼠标操作
  3. from selenium.webdriver.common.keys import Keys #键盘操作
  4. import time
  5. driver=webdriver.Chrome()
  6. driver.get('https://www.baidu.com/')
  7. # 定位元素 更多
  8. more=driver.find_element_by_link_text('更多')
  9. #鼠标操作
  10. ActionChains(driver).click(more).perform() #鼠标左击
  11. ActionChains(driver).context_click(more).perform() #鼠标右击
  12. ActionChains(driver).move_to_element(more).perform() #鼠标悬浮
  13. #键盘操作
  14. srk = driver.find_element_by_id("kw")
  15. srk.send_keys(12306)
  16. time.sleep(2)
  17. srk.send_keys(Keys.CONTROL,"a")
  18. srk.send_keys(Keys.CONTROL,"x")
  19. time.sleep(2)
  20. srk.send_keys(Keys.CONTROL,'v')

3.6 下拉框操作

  1. from selenium import webdriver
  2. driver=webdriver.Chrome()
  3. driver.get('https://www.baidu.com/')
  4. driver.maximize_window()
  5. # 定位元素 设置按钮
  6. set=driver.find_element_by_id('s-usersetting-top')
  7. set.click()
  8. # 定位元素 高级搜索
  9. find=driver.find_element_by_xpath('//*[@id="s-user-setting-menu"]/div/a[2]/span')
  10. find.click()
  11. # 定位元素 全部时间
  12. time=driver.find_element_by_class_name('c-select-selected-value')
  13. time.click()
  14. # 定位元素 最近一月
  15. m=driver.find_elements_by_class_name('c-select-item')
  16. #方式一:
  17. m[3].click()
  18. #方式二
  19. for i in m:
  20. if i=='最近一月':
  21. i.click()

3.7 等待操作

(1)强制等待

  1. import time #强制等待:无论网络是否良好,必须等待对应的时间,才会执行下面的代码
  2. time.sleep(3)

(2) 隐式等待

driver.implicitly_wait(100)  #隐式等待,当前界面的所有元素全部加载完成,才会执行下面的代码

(3)

  1. from selenium.webdriver.support.wait import WebDriverWait #导入显性等待的包
  2. from selenium.webdriver.support import expected_conditions as EC #判断所需要的元素是否已经被加载出来
  3. from selenium.webdriver.common.by import By #定位
  4. # 定位元素 设置按钮
  5. WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,"s-usersetting-top")))
  6. set=driver.find_element_by_id('s-usersetting-top')
  7. set.click()

四.Selenium IDE

4.1 什么是Selenium IDE?

  1. Selenium的IDE(集成开发环境)是一个易于使用的Firefox插件,用于开发Selenium测试案例。
  2. 它提供了一个图形用户界面,用于记录使用Firefox浏览器,用来学习和使用Selenium用户操作,
  3. 但它只能用于只用Firefox浏览器不支持其它浏览器

4.2 IDE功能简介

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发