Selenium学习007-使用技巧


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-使用技巧)