zoukankan      html  css  js  c++  java
  • python+selenium自动测试之WebDriver的常用API(基础篇二)

    本篇介绍一下python+selenium复杂操作的处理,基于python3.6,selenium3.141,详细资料介绍查看官方API文档,点击这里

    一、常见特殊情况处理如iframe/弹窗处理

    有时候定位不到元素,是因为需要定位的元素在frame里面,这个时候需要切换到对应的frame里面,再去定位元素

     1 # 切换frame
     2 driver.switch_to.frame("frame")  # 切入到id="frame"的嵌套中
     3 driver.switch_to.default_content()  # 退出当前frame, 退回到原来的主body
     4 driver.switch_to.parent_frame()  # 返回上一级父frame
     5 # 弹窗对话框处理
     6 driver.switch_to.alert.text  # 获取网页上的警告信息
     7 driver.switch_to.alert.accept  # 接受警告信息,告警弹窗对话框点击确定
     8 driver.switch_to.alert.dismiss  # 取消告警弹窗对话框
     9 driver.switch_to.alert.send_keys("context")  # 弹窗对话框中输入context
    10 # 切换窗口/浏览器
    11 driver.window_handles  # 获取所有浏览器句柄,一般用于for in 遍历
    12 driver.switch_to.window("handle")  # 切换到handle的窗口

    二、等待时间的设置

      隐形等待,设置全局元素等待超时时间。隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver 查询Dom一定时间。默认值是0, 但是设置之后,这个时间将在WebDriver 对象实例整个生命周期都起作用。但这里有一个弊端,那就是程序会在设定的时间内一直等待整个页面加载完成,才会执行下一步,有时候个别JS加载比较慢会比较浪费时间。

    1 # 设置隐性等待时间
    2 driver.implicitly_wait(10)

      显性等待,wait模块的WebDriverWait()类,配合until或者until_not方法,再辅以一些判断条件expected_conditions模块,就可以构成这样一个场景:每经过多少秒就查看一次locator的元素是否可见,如果可见就停止等待,如果不可见就继续等待直到超过规定的时间后,报超时异常;如果同时设置隐性等待和显性等待,取最大等待时间。

     1 # 设置显性等待
     2 from selenium.webdriver.support import expected_conditions as EC
     3 """
     4  __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
     5  - driver - Instance of WebDriver (Ie, Firefox, Chrome or Remote)
     6  - timeout - 超时时间
     7  - poll_frequency - 迭代间隔时间,停几秒重新获取一次,默认0.5S
     8  - ignored_exceptions - 超时时间内忽略的异常,默认只有NoSuchElementException
     9 """
    10 WebDriverWait(driver, 20, 1).until(EC.presence_of_element_located((By.ID, 'foo')))

      expected_conditions模块常用的判断条件,这里根据官方API翻译一下,仅供参考

    三、Cookie处理

    1 driver.get_cookies()  # 获得所有cookie信息
    2 driver.get_cookie("name")  # 返回指定name的cookie信息
    3 driver.add_cookie({'name': 'key', 'value': 'value'})  # 添加cookie 
    4 driver.delete_cookie("name")  # 删除指定name的cookie 
    5 driver.delete_all_cookies()  # 删除所有cookie

    四、其他操作(下拉框/文件上传等)

    1 # 下拉框处理
    2 from selenium.webdriver.support.ui import Select
    3 # when given "foo" this would select an option like: <option value="foo">Bar</option>
    4 Select(driver.find_element_by_xpath('xpath')).select_by_value("foo")
    5 # 上传文件,使用send_keys()发送一个本地的文件路径,从而达到上传文件的目的
    6 driver.find_element_by_name("file").send_keys('D:\test_file.xlsx')
    7 # 截图,必须以".png"结尾
    8 driver.get_screenshot_as_file("text.png")
  • 相关阅读:
    lnmp分离部署
    Nginx
    Keepalived脑裂监控
    KVM虚拟化
    mysql中间件proxysql实现mysql读写分离
    分离部署lnmp
    nginx
    Keepalived脑裂监控
    keepalived高可用
    KVM虚拟化
  • 原文地址:https://www.cnblogs.com/andrew209/p/10089536.html
Copyright © 2011-2022 走看看