美文网首页selenium知识点整理&汇总
Selenium学习007-使用技巧

Selenium学习007-使用技巧

作者: 残阳夕露 | 来源:发表于2018-07-30 19:35 被阅读103次

    Selenium学习笔记目录

    webdriver对象的一些方法

    • 获取某个元素的属性值
    # 获取选定元素对应的链接
    ele.get_attribute("href")
    
    • 获取当前窗口的title
    driver.get('https://www.baidu.com/')
    print(driver.title)
    driver.find_element_by_id('kw')
    print(driver.title)
    
    • 获取当前窗口的地址栏url地址
      driver.current_url

    • 随着用户的操作,title和current_url会变化

    • 截屏-全部屏幕

    driver.get_screenshot_as_file('ssl.png')
    
    • 截屏-某个元素
    ele = driver.find_element_by_id('search')
    ele.screenshot_as_png('serch.png')
    

    切换窗口

    • 切换到新的窗口里面操作

      • 循环遍历所有的窗口 driver.window_handles
      • driver.switch_to.window(handle)方法切入新窗口
      • 检查该窗口特点,是否为要切入的那个
    • 切换到最初的窗口

      • 保存主窗口的handle
    • 关闭窗口

      • close方法
      • quit()关闭整个浏览器
    • 示例

      # 点击某个元素,打开了一个新的窗口
      # 保存主窗口handle
      mainWindow = driver.current_window_handle
      print(driver.window_handles)
      for handle in driver.window_handle:
          # 切换到新窗口
          driver.switch_to.window(handle)
          # 检查是否是我们要进入到window
          if '百度' in driver.title:
              break
      # 进行操作
      pass
      # 切换到主窗口
      driver.switch_to.window(mainWindow)
      # 进行操作
      pass
      

    弹出对话框

    • 对话框一般来说有三种:
      • alert 简单通知(一个按钮)
      • confirm (确定,取消)
      • prompt (输入内容,确定,取消)
    • 操作方法
    driver.switch_to.alert.accept() # 点击ok
    driver.switch_to.alert.text # 得到对话框内容
    driver.switch_to.alert.getText() # 得到对话框的内容
    driver.switch_to.alert.dismiss() # 点击Cancel
    driver.switch_to.alert.send_keys() # 输入内容
    # alert = driver.switch_to.alert() # 获取弹框
    
    • alert弹窗和html元素弹框

      • alert弹窗,用上述方法
      • html弹框,查找定位相关元素进行操作
    • 如何判断alert弹窗和html弹框

      • 点击F12,查看是否可以获得该元素
    • 页面含有input元素,通过插入文件到方式input元素win32com.client

    1. 直接发送键盘消息給 当前应用程序。
    2. 前提是浏览器必须是当前应用(放在最上层,浏览器运行后不要操作
    import win32com.client
    shell = win32com.client.Dispath('WScript.Shell')
    shell.Senkey(r'd:\p1.jpg' + '\n')
    
    

    刷新页面,前进,后退

    • 页面刷新 refresh
    • 前进 forward
    • 后退 back
    driver.refresh()
    driver.forward()
    driver.back()
    

    使用技巧

    • 易消失元素的查看技巧
      • 鼠标移到该元素上面才会出现
      • 鼠标移开就会消失
      • 5秒后冻结页面setTimeout(function(){debugger;},5000)
        233.gif

    浏览器定位元素 copy selector

    • 获取元素的方法 css xpath
    • 取巧:选中元素,右键点击copy,选择copy selector,或者选择copy xpath

      上层节点有id时,此方法比较方便,否则可能会生成比较长的路径;
      路径太长时,后期html中被修改的可能性比较大,不好维护
      此方法并不适用于所有情况,慎用

    • 动态的id不可使用

    异常捕获,确保chrome进程退出

    • 切换到新的窗口里面操作
    • 使用try...finally...
      try:
          # 可执行代码
      except:
          print()
      finally:
          driver.quit()
      

    特殊动作

    • ActionChains 类按下,移动,拖动等
      • acInstance.action1().action2().actionN().perform()
    • 移动到某个元素上面
      • ActionChains(driver).move_to_element(ele).perform()
      from selenium.webdriver.common.action_chains import ActionChains
      ac = ActionChains(driver)
      ac.move_to_element(driver.find_element_by_id('zxnav_1')).perform()
      
    • 一次性输入多个input内容
      t1 = driver.find_element_by_id('t1')
      t2 = driver.find_element_by_id('t2')
      t3 = driver.find_element_by_id('t3')
      from selenium.webdriver.common.action_chains import ActionChains
      ac = ActionChains(driver)
      ac.click(t1).send_key('1').click(t2).send_key('2').click(t3).send_key('3').perform()
      

    页面元素不可见

    • 通常不可见元素都是可以操作的
    • 如果确实需要改变窗口大小
      # 获取窗口大小,返回的size是字典(宽度和高度)
      size = driver.get_window_size()  
      # 改变大小,()里对应的分别是宽度和高度,数字对应的是像素,size['height']表示保持原高度不变
      driver.set_window_size(1100,size['height']) 
      
    • driver.max... 窗口最大化
    • 滚动页面
      # X坐标的值,Y坐标的值
      # 正数往下往右移动,负数往上往左移动
      driver.execute_script('window.scrollBy(250,0)')
      # 可在浏览器的console中输入window.scrollBy(250,0),以查看是否能滚动到自己想要的位置
      

    渲染

    - 后端渲染
    - 前端渲染
    - 前端渲染问题引起的报错:statle element reference
    - 解决方法:获取内容前,sleep一下
    

    合理使用半自动化

    • 图形界面自动化的难度是比较大的
      • 模拟难(12306输入验证码...)
      • 检查难(检查logo、布局等...)
    • 用半自动化的方法
      -难自动化的操作,都提示(beep)让人去做
      import winsound
      winsound.Beep(1500,3000) # 发出提示音
      
      • 其余部分:自动化 去做
    • 自动化的目的:提高测试效率

    自动化面对的问题

    • 如何组织我们的自动化脚本?都放在一个大目录里面?
    • 一次测试开始了,如何选择测试脚本去执行?难道是手动的一个个运行这些脚本?
    • 每个测试脚本中,各个检查点是否通过,如何在测试结果里面清晰的反馈
    • 一些通用功能的实现如何以库的形式组织起来,供各个脚本使用
    • 执行结果如何以容易查看的报告的形式提交给别人查阅
    • 以上这些都可以由自动化测试框架解决

    相关文章

      网友评论

        本文标题:Selenium学习007-使用技巧

        本文链接:https://www.haomeiwen.com/subject/pzcqvftx.html