• 12
  • 13
分享

  相比于高大上的各种Selenium进阶指南,个人认为夯实基础至关重要,本文以一个个小案例的方式将KPI常用接口的使用进行归纳总结,有条件的同学可以自己练习几次,相信会有所收获。

  鼠标操作

  实现功能:百度页面->移动到‘设置’按钮->右键点击/鼠标双击/鼠标拖拽到元素松开。

1-1.png

  ·首先导入ActionChains方法

  ·使用格式:ActionChains(driver).操作(element).perform()

  实现代码:

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
sleep(2)
#设置按钮
element=driver.find_element_by_id('s-usersetting-top')
#鼠标移动到设置按钮
ActionChains(driver).move_to_element(element).perform()
#鼠标右键点击元素
ActionChains(driver).context_click(element).perform()
#鼠标双击元素
ActionChains(driver).double_click(element).perform()
#鼠标拖拽到元素松开
ActionChains(driver).drag_and_drop(element).perform()
sleep(2)

  常见方法:

1-2.png

  键盘操作

  实现功能:百度搜索框输入selenium->复制内容->sogo搜索框粘贴内容。

1-3.png

  ·首先导入Keys方法

  ·使用格式:driver.findelementbyid("kw").sendkeys(Keys.CONTROL,'a')

  实现代码:

#导入相关包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
#打开浏览器
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
#定位搜素框->输入关键字—>复制
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'c')
sleep(2)
#打开sogo页面->sogo搜索框粘贴内容
driver.get("http://www.sogou.com/")
driver.find_element_by_id("query").send_keys(Keys.CONTROL,'v')

  Javascript 使用技巧

  js在selenium有许多应用,最主要的有滚动条操作。

  实现功能:进入百度搜索结果页-》滚动条分别滚到到顶部、底部及指定元素位置。

  使用格式:driver.execute_script('window.scrollTo(0,0)')

  实现代码:

from selenium import webdriver
from time import sleep
#打开浏览器,进入搜索页面
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_id('kw').send_keys('wer')
driver.find_element_by_id('su').click()
sleep(3)
#滑动到页面底部
driver.execute_script('window.scrollTo(0,10000)')
sleep(3)
# 滑动到页面顶部
driver.execute_script('window.scrollTo(0,0)')
sleep(3)
#滑动到指定元素(通过链接方式)
target = driver.find_element_by_partial_link_text('汽车')
driver.execute_script("arguments[0].scrollIntoView();", target)
sleep(3)
driver.quit()

  屏幕截图

  屏幕截图功能常用的有两种savescreenshot()及 getscreenshotasfile()。

  使用格式

  ·self.driver.save_screenshot('baidu.png')

  ·self.driver.getscreenshotasfile(filepath)

  在项目中用到屏幕截图的地方基本使用场景为测试用例失败后保存失败的截图,帮助定位问题。

  实现功能1:百度搜索成功后屏幕截图-通过save_screenshot方法。

  实现代码:

#导入相关包
from time import sleep
from selenium import webdriver
class Testcase():
#打开百度
    def __init__(self):
        self.driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
       def test4(self):
        self.driver.find_element_by_id('kw').send_keys('nihao ')
        self.driver.find_element_by_id('su').click()
        sleep(2)
        #屏幕截图
        self.driver.save_screenshot('baidu.png')
        sleep(2)
if __name__ == '__main__':
    case=Testcase()
    case.test4()

  实现功能2:百度搜索成功后屏幕截图,保存到指定路径,以当前时间命名。

#导入相关包
  from time import sleep
  from selenium import webdriver
  import os
  from time import sleep, time, localtime, strftime
  def test4(self):
  self.driver.find_element_by_id('kw').send_keys('nihao ')
  self.driver.find_element_by_id('su').click()
  sleep(2)
  #获取当前时间
  str=strftime("%Y-%m-%d-%H-%M-%S",localtime(time()))
  #png格式命名
  file_name=str+'.png'
  #获取路径
  path=os.path.abspath('screenshot')
  #路径名+文件名拼接
  file_path=path+'/'+file_name
  #截图操作
  self.driver.get_screenshot_as_file(file_path)
  if __name__ == '__main__':
  case=Testcase()
  case.test4()

  iframe切换

  应用场景:

  在编写脚本的时候,经常会发现最熟悉的错误“元素定位不到“,此时如果你查看页面元素,有可能你会发现元素在>标签对之间,此时,我们只有先将代码驱动切换到frame内部才可定位成功。

  使用格式:

1-4.png

  实现功能:登录qq邮箱为例,用户名嵌套在iframe弹窗内。

1-5.png

  实现代码:

from time import sleep
  from selenium import webdriver
  class Testwindow(object):
  def __init__(self):
  self.driver=webdriver.Chrome()
  self.driver.get('https://mail.qq.com/')
  self.driver.implicitly_wait(5)
  def login(self):
  #进入iframe
  self.driver.switch_to.frame('login_frame')
  sleep(1)
  #输入账号、密码
  self.driver.find_element_by_id('u').send_keys('635907412@qq.com')
  self.driver.find_element_by_id('p').send_keys('wangxinlibingzhi')
  self.driver.find_element_by_id('login_button').click()
  self.driver.quit()
  if __name__ == '__main__':
  #实例化类
  test=Testwindow()
  #调用登录功能
  test.login()

  窗口句柄

  应用场景:当单击主页上的链接时,将打开一个新窗口。在新打开的窗口中,无法执行任何操作,因为焦点仍然在主页Web驱动程序上

  这时候,我们需要把焦点定位到新打开的页面上。

  ·现获取所有窗口 a=driver.window_handles

  ·再获取最新打开的窗口driver.switch_to.window(a[-1])

  这里有一点不一样有时候handles【1】里面的数字是1或者-1都可以。

  实现功能:百度页面,打开x超链接,在新窗口下拉滚动条。

  实现代码:

#导入相关包
  from time import sleep
  from selenium import webdriver
  #定义一个类
  class Testwindow(object):
  #定义初始化函数
  def __init__(self):
  self.driver=webdriver.Chrome()
  self.driver.get('https://www.baidu.com/')
  self.driver.implicitly_wait(5)
  #定义初始化函数,打开x超链接,在新窗口下拉滚动条
  def link(self):
  self.driver.find_element_by_partial_link_text('2021').click()
  #获取窗口句柄
  a=self.driver.window_handles
  self.driver.switch_to.window(a[1])
  sleep(3)
  self.driver.execute_script('window.scrollTo(0,10000)')
  sleep(1)
  self.driver.quit()
  if __name__ == '__main__':
  test=Testwindow()
  test.link()

  警告弹 -alert/confirm/promp

  应用场景:有些页面进入后自带弹窗提醒功能需要确认,这时候就需要将焦点定位到alert弹窗上。

  使用格式:

alert=driver.switchtoalert()
  alert.accept()

  实现功能:本地新建html文件,模仿alert/confirm/prompt弹窗,定位弹窗并确认

  实现代码:

新建alert.html,生成弹窗效果
  <!DOCTYPE html>
  <html>
  <head>
  <meta charset="UTF-8">
  <title></title>
  </head>
  <body>
  <a href="javascript:alert('提示框')" id="alert">Alert</a><br>
  <a href="javascript:confirm('真的要删除数据么' )" id="confirm">confirm</a><br>
  <a href="javascript:var age = prompt('请输入数据');document.write(age)" id="prompt">prompt</a><br>
  </body>
  </html>
  #导入相关包
  import os
  from time import sleep
  from  selenium import webdriver
  class Testcase(object):
  #打开弹窗页面
  def __init__(self):
  self.driver=webdriver.Chrome()
  #获取html页面路径地址
  path=os.path.dirname(os.path.abspath(__file__))
  file_path='file:///'+path+'/test_alert.html'
  self.driver.get(file_path)
  #alert弹窗
  def alert(self):
  self.driver.find_element_by_id('alert').click()
  #定位到alert弹窗
  alert=self.driver.switch_to.alert
  #弹窗确认
  alert.accept()
  sleep(2)
  #生成confim弹窗
  def confirm(self):
  self.driver.find_element_by_id('confirm').click()
  confirm=self.driver.switch_to.alert
  confirm.accept()

  附件上传

  实现功能:拖拽图片到百度上传图片搜索功能区域。

1-6.png

  使用格式:

定位.send_keys(r'图片路径')
  #导入相关包
  from selenium import webdriver
  from time import sleep
  #打开百度
  driver=webdriver.Chrome()
  driver.get('http://www.baidu.com')
  #定位+按钮
  driver.find_element_by_class_name('soutu-btn').click()
  sleep(1)
  #打开指定位置的图片
  driver.find_element_by_class_name('upload-pic').send_keys(r'F:\\wx\\PyCharm Community Edition 2018.1.3\\zdh\\1.jpg')

  时间等待

  常见的时间等待有三种:固定、显示、隐士

  应用场景:主要用于模拟真实的用户操作,有时时间过于短,页面响应不过来,从而造成元素定位不到

  使用格式:

  ·sleep(3):一般用于调试

  ·implicity_wait():隐士等待一般对整个driver周期都适用,使用一次即可

  ·WebDriverWait(self.driver,2 ).until(EC.title_is('百度一下,你就知道')):这种最常用,一般是指某个元素出现了等待就结束

  实现功能:打开百度页面,等到页面标题出现再进行搜索操作。

  代码实现:

#导入包
  from selenium import  webdriver
  from selenium.webdriver.support.wait import WebDriverWait
  from selenium.webdriver.support import expected_conditions as EC
  #定义一个类
  class Testcase(object):
  #打开浏览器
  def __init__(self):
  self.driver=webdriver.Chrome()
  self.driver.get('https://www.baidu.com/?tn=88093251_33_hao_pg')
  #定义函数,实现显示等待
  def test_wait(self):
  WebDriverWait(self.driver,2 ).until(EC.title_is('百度一下,你就知道'))
  self.driver.find_element_by_id('kw').send_keys('自动化测试')
  #调用函数
  if __name__ == '__main__':
  case=Testcase()
  case.test_wait()



作者:桃子   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   TikTok Shop "链接很快就会在社交媒体应用中变得更加常见。据彭博社报道,该公司正在测试一项新功能,它能自动识别平台视频中的商品,然后提供一个链接,"在 TikTok Shop 上查找类似商品"。该公司发言人没有立即回应置评请求,该功能也更像是一个早期测试。  去年 11 月,Business Insider 曾对同一功能进行过测试,我们还发现了去年9月和10月包含 "在 TikTok 商店查找类似商品 "按钮的视频。TikTok 此前证实,它正在美国和英国的少数用户中测试该功能。一位在视频中添加了产品链接的用户没有被告知该链接将被...
            0 0 379
            分享
          • 测试用例运行稳定性是自动化质量的一个重要指标,在运行中需要尽可能的剔除非bug造成的测试用例执行失败, 对于失败用例进行重跑是常用策略之一。一种重跑策略是所有用例运行结束后对失败用例重跑, 另一种重跑策略是在运行时监控用例运行状态,失败后实时重跑。下面,详细介绍TestNG如何对失败测试用例实时重跑并解决重跑过程中所遇到问题的实践和解决方案。对失败测试用例进行实时重跑,有以下几个方面需求:测试用例运行失败,监听到失败后立即进行重跑;测试用例通过 dependsOnMethods/dependsOnGroups标记依赖其他测试用例,在被依赖的测试用例重跑运行成功后,该测试用例可以继续运行;对于重...
            0 0 745
            分享
          •   最近几年,软件测试行业的发展比较迅速。可以从人员的薪资、技术的要求、岗位的细化等方面看出。几年前做功能测试达到熟练程度的,或许可以拿到一个不错的offer。短短3-5年,只会功能测试,找工作都困难。不知不觉中,你在浏览招聘信息时,经常会看到这么一条“熟悉或精通接口测试、自动化测试、渗透测试、APP专项测试中的一项或多项。至少熟练使用一种编程语言或脚本语言”。  这是一个初级测试工程师的招聘信息。同样是招聘功能测试人员,但是现在会在里面加上这么一条。很多人会问,为什么招功能测试,却要在招聘信息里面加上这么一条呢?原因是这样的:公司目前是做功能测试,但日后随着业务的开展,会随时需要用到新的测试...
            3 3 2547
            分享
          • 12月6日,健康保障科技平台水滴公司发布了2022年第三季度财报。根据财报,水滴公司的总营收为7.722亿元,较2021年第三季度的7.793亿元同比下降0.91%;归属于水滴公司的净利润为1.696亿元,而2021年第三季度的净亏损为4.770亿元。值得一提的是,虽然水滴公司的净利润较2021年第三季度扭亏,但整体业绩情况并不乐观,尤其是其总营收已连续五个季度出现了同比下降的情况,从2021年第三季度至2022年第三季度,水滴公司的总营收分别同比下降9.7%、27.27%、26.57%、25.33%和0.91%。净利润算是较为亮眼的指标之一,根据历年财报,水滴公司在2018年至2021年的净...
            0 0 423
            分享
          •   在今天的 Microsoft Ignite 2023 开发者大会上,微软宣布 Bing Chat 及其企业高级版 Bing Chat for Enterprise 正式更名为 Copilot!  微软通讯总监 Caitlin Roulston 表示,“将‘Bing Chat Enterprise’更名为‘Copilot’反映了我们为消费者和商业客户打造统一的 Copilot 体验的愿景”。  当然,不仅仅是名字变了。从 12 月 1 日开始,凡是使用企业账户(确切地说是 Microsoft Entra ID)登录 Bing 的用户在使用 Copilot 时将享受到“商业数据保护”的好处。这...
            0 0 774
            分享
      • 51testing软件测试圈微信