范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

pythonselenium做ui自动化测试用法必会

   一、前言
  大家都知道,基于 Web 端的 测试 的基础框架是需要 Selenium 做主要支撑的,这里边给大家介绍下 Web测试 核心之基于 Python 的Selenium
  Selenium是用于测试Web应用程序用户界面(UI)的常用框架。它是一款用于运行端到端 功能测试 的超强工具。您可以使用多个编程语言编写测试,并且Selenium能够在一个或多个 浏览器 中执行这些测试。
   二、环境安装
  建议 python3.7。
  安装基于python的selenium依赖包,命令:pipinstallselenium
  安装浏览器驱动包,推荐使用chrome浏览器的chromedriver.exe,对应chrome版本一定要对哦,不然运行不起来的,安装在哪?想放哪放哪,不过一般是放在python的根目录下。下载地址:chromedriver.storage.googleapis.com/index.html
  安装PyCharm,这个无脑安装~然后可自定义界面UI及编码风格。
   三、牛刀小试
   1.控制浏览器 #coding=utf-8
  from selenium import webdriver
  driver = webdriver.Chrome()
  driver.get("http://www.baidu.com")
  driver.maximize_window() #将浏览器最大化显示
  driver.set_window_size(480, 800) #设置浏览器宽480、高800显示"
  driver.back() #后退
  driver.forward() #前进
  driver.close() #关闭chrome
  driver.quit() # 退出chrome
   2.对象的定位 通过 id 定位:find_element_by_id()
  通过 name 定位:find_element_by_name()
  通过 class 定位:find_element_by_class_name()
  通过 tag 定位:find_element_by_tag_name()
  通过 link 定位:find_element_by_link_text()
  通过 partial_link 定位:find_element_by_partial_link_text()
  通过 xpath 定位:find_element_by_xpath()
  通过 css 定位:find_element_by_css_selector()
  以上几种定位是常规操作,应该就基本够用了,但是有的时候就是会出现一些诡异的定位失效或者定位到了点击失效的问题,这个时候如果用js进行直接执行该事件,接下来介绍下非常规操作: id 定位:document.getElementById()
  name 定位:document.getElementsByName()
  tag 定位:document.getElementsByTagName()
  class 定位:document.getElementsByClassName()
  css 定位:document.querySelectorAll()
  search_js = "document.getElementsByName("wd")[0].value="selenium";"# 通过name定位,然后赋值"selenium"
  search_js2 = "document.querySelectorAll(".s_ipt")[0].value="selenium";"# 通过css定位,然后赋值"selenium"
  button_js = "document.getElementById("su").click();"# 通过id定位,然后执行单击操作
  button_js2 = "document.getElementsByClassName("s_btn")[0].click()"# 通过className定位,然后执行单击操作 driver.execute_script(search_js2)#执行,execute_script(script, *args)
  以上几种定位是可以再度升级,可以利用jQuery定位一波。
   3.操作测试对象 #coding=utf-8
  from selenium import webdriver
  driver = webdriver.Chrome()
  driver.get("http://passport.kuaibo.com/login/")
  driver.find_element_by_id("user_name").clear() #清除输入框的默认内容
  driver.find_element_by_id("user_name").send_keys("username")
  driver.find_element_by_id("user_pwd").clear()
  driver.find_element_by_id("user_pwd").send_keys("password") #输入输入框的内容为"password"
  driver.find_element_by_id("dl_an_submit").click() #通过 submit() 来提交操作
  driver.find_element_by_id("dl_an_submit").submit()
  size=driver.find_element_by_id("kw").size #返回  百度  输入框的宽高 text=driver.find_element_by_id("cp").text #返回百度页面底部备案信息
  #返回元素的属性值,可以是 id、name、type 或元素拥有的其它任意属性
  attribute=driver.find_element_by_id("kw").get_attribute("type") #返回元素的结果是否可见,返回结果为 True 或 False
  result=driver.find_element_by_id("kw").is_displayed()
  driver.quit() #退出
   4.鼠标键盘事件 from selenium import webdriver #引入 Keys 类包
  from selenium.webdriver.common.keys import Keys #引入 ActionChains 类
  from selenium.webdriver.common.action_chains import ActionChains
  ... #鼠标事件 #定位到要操作的元素
  right =driver.find_element_by_xpath("xx") #对定位到的元素执行鼠标右键操作
  ActionChains(driver).context_click(right).perform() #对定位到的元素执行鼠标双击操作
  ActionChains(driver).double_click(right).perform() #对定位到的元素执行鼠标移动到上面的操作
  ActionChains(driver).move_to_element(right).perform() #对定位到的元素执行鼠标左键按下的操作
  ActionChains(driver).click_and_hold(right).perform() #定位元素的原位置
  element = driver.find_element_by_name("xxx") #定位元素要移动到的目标位置
  target = driver.find_element_by_name("xxx") #执行元素的移动操作
  ActionChains(driver).drag_and_drop(element, target).perform() #键盘事件 #删除多输入的一个 值
  driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) #输入空格键+"教程"
  driver.find_element_by_id("kw").send_keys(Keys.SPACE)
  driver.find_element_by_id("kw").send_keys(u"教程") #ctrl+x 剪切输入框内容
  driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x") #其余的键盘操作类似
   5.等待时间 #coding=utf-8
  from selenium import webdriver #导入 WebDriverWait 包
  from selenium.webdriver.support.ui import WebDriverWait
  from selenium.webdriver.support import expected_conditions as EC #导入 time 包
  import time
  driver = webdriver.Chrome()
  driver.get("http://www.baidu.com") #WebDriverWait()方法使用,显示等待,WebDriverWait(driver,超时时长,调用频率,忽略异常).until(可执行方法,超时返回的信息),这里可以调用EC来实现可执行方法
  is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id("kw").is_displayed()) #until(method, message=’ ’),调用该方法提供的驱动程序作为一个参数,直到返回值不为 False
  element.send_keys("selenium") #添加智能等待,隐时等待
  driver.implicitly_wait(30)
  driver.find_element_by_id("su").click() #添加固定休眠时间,强制等待
  time.sleep(5)
  driver.quit()
   6.组对象定位及层级定位
  7.多窗口处理 #coding=utf-8
  from selenium import webdriver import time
  driver = webdriver.Chrome()
  driver.get("http://www.baidu.com/") #获得当前窗口
  nowhandle=driver.current_window_handle #打开注册新窗口
  driver.find_element_by_name("tj_reg").click()
  allhandles=driver.window_handles #循环判断窗口是否为当前窗口
  for handle in allhandles: if handle != nowhandle:
  driver.switch_to_window(handle) print "now register window!"
  #切换到邮箱注册标签
  driver.find_element_by_id("mailRegTab").click()
  time.sleep(5)
  driver.close() #回到原先的窗口
  driver.switch_to_window(nowhandle)
  driver.find_element_by_id("kw").send_keys(u"注册成功!")
  time.sleep(3) #ifrome处理 #这里会自动识别id,name,如果没有则可以将元素通过选择器找到,然后输入该元素即可
  driver.switch_to_frame("f1")
  element = driver.find_element_by_id("kw")
  driver.switch_to_frame(element)
  driver.quit() 
   8.提示窗口处理 #coding=utf-8
  from selenium import webdriver import time
  driver = webdriver.Chrome()
  driver.get("http://www.baidu.com/") #点击打开搜索设置
  driver.find_element_by_name("tj_setting").click()
  driver.find_element_by_id("SL_1").click() #点击保存设置
  driver.find_element_by_xpath("//p[@id="gxszButton"]/input").click() #获取网页上的警告信息
  alert=driver.switch_to_alert() #接收警告信息
  alert.accept() #取消对话框(如果有的话)
  alert.dismiss() #输入值(如果有的话)
  alert.send_keys("xxx")
   9.控制浏览器滚动条
  这个运用之前提示的jq语句即可实现。
  10.cookie处理,主要用途在于处理验证码问题 #coding=utf-8
  from selenium import webdriver import time
  driver = webdriver.Chrome()
  driver.get("http://www.youdao.com") #向 cookie 的 name 和 value 添加会话信息。
  driver.add_cookie({"name":"key-aaaaaaa", "value":"value-bbbb"}) #遍历 cookies 中的 name 和 value 信息打印,当然还有上面添加的信息
  for cookie in driver.get_cookies(): print "%s -> %s" % (cookie["name"], cookie["value"]) ##### 下面可以通过两种方式删除 cookie ##### # 删除一个特定的 cookie
  driver.delete_cookie("CookieName") # 删除所有 cookie
  driver.delete_all_cookies()
  time.sleep(2)
  driver.close()
   四、小结
  在熟悉了selenium常见的API基本操作后,这里便可以开展实际 测试用例 的设计了,一个良好的 自动化测试 用例起码符合一下六个条件:
  1.一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器。
  2.一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统。
  3.尽量只做功能中正向逻辑的验证,不要考虑太多逆向逻辑的验证,逆向逻辑的情况很多(例如手号输错有很多种情况),验证一方面比较复杂,需要编写大量的脚本,另一方面自动化脚本本身比较脆弱,很多非正常的逻辑的验证能力不强。(我们尽量遵循用户正常使用原则编写脚本即可)
  4.脚本之间不要产生关联性,也就是说编写的每一个脚本都是独立的,不能依赖或影响其他脚本。
  5.如果对数据进行了修改,需要对数据进行还原。
  6.在整个脚本中只对验证点进行验证,不要对整个脚本每一步都做验证。
  最后配合unittest或者testNG单元测试框架,实现分层、数据驱动、断言、截图、日志等全方位功能,得心应手的开展自动化测试工作。

简单直接且有效的检测音响高中低音质的方法阜新声艺视听在没有专业知识或没有专业测试工具的前提下,音响小白应该怎么检测音箱是否具备有高中低音呢?今天就教大家几招简单直接并且有效的方法低音部分在音箱旁放一杯水,打开机子播放,低音效果好的音十分钟让你理解关于声音的7个概念阜新声艺视听音响发烧友聊天,经常会听到他们说音质音色音场频段解析力动态对比等高大上的词。对于不了解音乐音响的小白来讲,简直听得云里雾里。现在小编就用简单易懂的话语,带您了解这些词的概念含义。音一文搞清点声源和线阵列音箱功能区别阜新声艺视听线阵音箱也称为线性整列扬声器。多只音箱可以组合成一个具有相同的振幅与相同位置的音箱组(线阵组)的音箱叫做线阵音箱。线性阵列是一组排列成直线间隔紧密的辐射单元,并具有相同的振幅与相位音频处理器延时功能怎么用阜新声艺视听音频处理器中的延时是扩声系统工程师经常会用到的功能,在这里我们简单归纳一下调节延时的主要方法。我们知道,延时数值只能够输入正值,无法输入负值。因此,在采用延时功能时第一种方法步骤1宴会厅灯光音响系统介绍阜新声艺视听以希尔顿五星级酒店宴会厅为例,宴会厅舞台台口宽11m,舞台台口高6m,舞台深9m。本工程设计方案是根据国内高档次宴会厅标准和要求来设计的,综合吸取了当前国内外此类系统的特点而设计制家庭KTV包房音响的摆放与不规则声场的调音方法在音响工程实战中,由于很多家庭KTV音响套装客户的包房是不规则的,导致音响工程的难度倍增。如果消费者在网上买了家庭KTV音响套装,收到货物后在工作人员的指导下直接安装好。那么很有可详细说明有源音箱与无源音箱的区别阜新声艺视听大家在购买音箱的时候,总是会被音箱的类型给困扰,那就是有源音箱和无源音箱到底是什么?今天小编就来为大家来个解惑,让大家在选择过程中,能够因地制宜,减少不必要的麻烦和损失。什么是有源各地超火音乐节幕后设备大盘点!阜新声艺视听近段时间受疫情影响,全国多地演出取消,剧院KTV等娱乐场所暂停营业,演艺行业再次面临停摆。如今境遇不同,但行业前进的步伐不止。在黑暗中积蓄力量,则终将迎来发展的黎明。小编本次继续为演出场所的声场优化阜新声艺视听EQ真的能解决空间声学问题吗?首先,我们先来思考一下我们面临的声学问题是受限于扬声器系统的性能,还是室内建筑声学缺陷,亦或者两者兼而有之?让我们先来看看典型的大型音乐表演空间的声场如何规划音响系统!!阜新声艺视听想必大家都面临过这样的问题,想要一套系统,但不知道如何规划吗!?做事有轻重缓急,因此,我们先来看看,PA音响系统规划的优先级是什么?1。空间设计规划2。预算分配控制3。清楚自己的需如何保障重要会议正常召开,以下几点需要注意阜新声艺视听数字会议系统作为现代会场建设的核心系统,不仅要有清晰的拾音功能和超长的拾音距离,而且系统的稳定运行保障也是非常重要的,尤其是大型的会议上,一旦出现故障,既耽误了会议的进度与决策的及
雷军突然官宣,小米新品牌代言人诞生,网友这次肯定没选错人选择品牌代言人听起来很简单,但实际上却非常困难,因为品牌代言人非常重要,某种程度上更是一个品牌价值观的体现,一个好的品牌代言人可以极大的提升品牌知名度和口碑,但相反一个有不良事件的享优乐I空气净化器怎么选?这几个品牌值得推荐每个家里的每一方空气都应该保持健康清新。很多人搬新家,都被新家表面的光彩吸引,甲醛正在肆意涌出却被时刻忽略,侵蚀着人们的身体。空气净化器应该是如今家中必备的一台设备。今天小编给大家低估华为了!鸿蒙新数据出炉,央视再次公开发声本文原创,请勿抄袭和搬运,违者必究华为顶住了外界环境的压力,推出了鸿蒙操作系统,在很多人都不看好的前提下,鸿蒙没有让世人失望。许多升级鸿蒙系统的花粉都表示,鸿蒙不仅有比肩安卓,iO央视报道小米自研芯片ISP芯片只是起点近日,央视播出的大型纪录片强国基石中报道了小米澎湃芯片C1的研发过程以及小米下一步研发的信息。纪录片中提到,小米位于北京的不开灯工厂生产了搭载自研ISP影像芯片(澎湃C1)的MIX小米11T获认证搭载联发科天玑芯片小米今年下半年将发布MIX4系列旗舰机型,同时还将会在海外发布数字系列新旗舰,现在它已经低调现身。8月10日消息,爆料人kacskrz曝光了小米11系列新成员小米11T,这款新机已高通劲敌来了!三星发布新可穿戴设备芯片GPU性能提升10倍8月10日消息,三星今天发布了ExynosW920芯片,它是为可穿戴设备专门定制的。它的上一代产品是3年前发布的Exynos9110芯片,ExynosW920相比于前代产品,其CP6月全球新能源车销量公布特斯拉第一,比亚迪第二,五菱滑落第四8月10日消息,EVSales网站公布了上半年全球新能源车的销量数据,全球新能源车共销售254。68万辆,在汽车总销量中的占比为6。3。6月份新能源车的销量为58。35万辆,同比上央视报道小米芯片研发ISP芯片只是起点,新款手机SoC已在路上近期,多家研究机构的数据显示,小米二季度的智能手机出货量已经超越苹果,成为了全球第二大智能手机厂商,距离全球顶级智能手机品牌又近了一步。但是,美中不足的是,三星苹果华为等头部的高端华科大学霸用11小时整理的python学习教程!整整448集,建议收藏兄弟!毫无套路!!福利分享1本套视频一共400集,本套视频共分4季第一季Python基础。第二季。Python深入和扩展第三季网络编程多线程扩展库第四季算法Python源码函数式编黑洞的密度极限是多少?黑洞的密度有多大?如果把我们的地球压缩成一个黑洞,那么它的体积将只有直径1。8厘米,相当于一个小玻璃球那么大,这样的密度是不是让人叹为观止?如果将我们的地球压缩成中子星,那么它的直什么时候应该配助听器?助听器的品牌很多,比如有德国西门子助听器丹麦唯听瑞声达助听瑞士峰力助听加拿大的优力康等,好的助听器价位也会有所差异,具体的好坏作为验配师的我们不能直接评定,而是根据患者的听力损失类