WebDriver API

注:这不是官方API文档,官方在这:Selenium Documentation

本篇覆盖了Selenium Webdriver的所有接口。

推荐导入样式 本节API展示了类的绝对位置。推荐的导入风格如下:

from selenium import webdriver

然后,可以访问的类如下:

webdriver.Firefox
webdriver.FirefoxProfile
webdriver.Chrome
webdriver.ChromeOptions
webdriver.Ie
webdriver.Opera
webdriver.PhantomJS
webdriver.Remote
webdriver.DesiredCapabilities
webdriver.ActionChains
webdriver.TouchActions
webdriver.Proxy

特殊键类(keys)可以这样导入:

from selenium.webdriver.common.keys import Keys

异常类可以这样导入(以实际的类名替换TheNameOfTheExceptionClass):

from selenium.common.exceptions import [TheNameOfTheExceptionClass]

API使用约定

一些属性(如方法)是可调用的,一些属性(如properties)是不可调用的,所有可调用的属性均以圆括号结尾。

属性的例子:

  • current_url 当前加载页面的URL Usage: driver.current_url

方法的例子: * close() 选择关闭的窗口 Usage: driver.close()

异常

所有的webdriver代码都可能会触发异常

exception Selenium.common.exceptions.ElementNotSelectableException(msg=None, screen=None, stacktrace=None)

Bases: selenium.common.exceptions.InvalidElementStateException

试图选择一个不能选择的元素时抛出 例如,选择“script"元素

exception selenium.common.exceptions.ElementNotVisibleException(msg=None,screen=None,stacktrace=None)

 Bases:selenium.common.exceptions.InvalidElementStateException

当一个元素存在于DOM中,但是不可访问的,如果试图与之互动,则会触发该异常。 大多数情况是试图点击或读取试图中隐藏的元素的文本

exception selenium.common.exceptions.ErrorInResponseException(response, msg)

Bases: selenium.common.exceptions.WebDriverException

服务端发生错误时抛出 当和firefox插件或remote driver server通信时可能会触发

exception selenium.common.exceptions.ImeActivationFailedException(msg=None, screen=None, stacktrace=None)

Bases: selenium.common.exceptions.WebDriverException

当激活输入法引擎失败时触发

exception selenium.common.exceptions.ImeNotAvailableException(msg=None, screen=None, stacktrace=None)

Bases: selenium.common.exceptions.WebDriverException

IME支持不可用时。当平台上任何依赖IME的方法,调用IME不可用时,均会触发。

exception selenium.common.exceptions.InvalidCookieDomainException(msg=None, srceen=None, stacktrace=None)

Bases: selenium.common.exceptions.WebDriverException

试图在超出当前URL的不同域添加一个cookie时触发

exceptin selenium.common.exceptions.InvalidElementStateException(msg=None, screen=None, stacktrace=None)

Bases: selenium.common.exceptions.WebDriverException

exception selenium.common.exceptions.InvalidSelectorException(msg=None, screen=None, stacktrace=None)

Bases:selenium.common.exceptions.NoSuchElementException

当selector被用来查找返回一个不是WebElement时触发。 目前只用在当selector查找一个无效的 xpath或 xpath指向的不是一个WebElements.

exception selenium.common.exceptions.InvalidSwitchToTargetException(msg=None, screen=None,stacktrace=None)

Bases: selenium.common.exceptions.WebDriverException

当切换到的frame或窗口目标不存在时触发

exeption selenium.common.exceptions.MoveTargetOutOfBoundsException(msg=None, screen=None, stacktrace=None)

Bases:selenium.common.exceptions.WebDriverException

当供给ActionsChains move() 方法的目标无效时触发,如超出文本

exception selenium.common.exceptions.NoAlertPresentException(msg=None, screen=None, stacktrace=None)

Bases:selenium.common.exceptions.WebDriverException

当切换到没有弹出警告时触发。 当通过调用Alert()类的操作后,屏幕中未弹出警告窗口时触发。

exception selenium.common.exceptions.NoSuchAttributeException(msg=None,screen=None,stacktrace=None)

Bases: selenium.common.exceptions.WebDriverException

当元素的属性找不到时抛出 可能会检查测试时浏览器中属性。在不同浏览器中,相同的属性可能会有不同的名称。

exception selenium.common.exceptionsNoSuchElemention(msg=None, screen=None,stacktrace)

Bases: selenium.common.exceptions.WebDriverException

当元素找不到时抛出该异常。 如果遇到此异常,可能要检查以下内容: * 检查find_by...使用的selector * 元素在查找时没有在页面上 页面可能仍在加载中,需要使用wait方法去等待

exception selenium.common.exceptions.NoSuchFrameException(msg=None, screen=None, stacktrace=None)

Bases: selenium.common.exceptions.InvalidSwitchToTargetException

当切换的Frame不存在时触发

exception selenium.common.exceptions.NoSuchWindowException(msg=None, screen=None, stacktrace=None)

Bases: selenium.common.exceptions.InvalidSwitchToTargetException

当切换的窗口不存在时触发 要想获取当前活动窗口的句柄,可以通过下面的方法获取活动窗口的句柄列表: print driver.windown_handles

exception selenium.common.exceptions.RemoteDriverServerException(msg=None, screen=None,stacktrace=None)

Bases: selenium.common.exceptions.WebDriverException

exception selenium.common.exceptions.StaleElementReferenceException(msg=None. screen=None, stacktrace=None)

Bases:selenium.common.exceptions.WebDriverException

当引用一个过期的元素时触发该异常 过期的意思是不再在页面的DOM中出现。 触发StaleElementReferenceException的原因包括,但不限于: * 很长时间没有操作页面,当定位元素时,页面已经更新。 * 元素出现后,该元素可能被删除后重新添加到屏幕的。这可能发生在javascript框架更新和节点重建时。 * 元素可能在iframe中,或文本内容已更新

exception selenium.common.exceptions.TimeoutException(msg=Noe, scren=None, stacktrace=None)

Bases:selenium.common.exceptions.WebDriverException

当已命令没有在规定时间内完成时会触发该异常

exception selenium.common.exceptions.UnableToSetCookieException(msg=None, screen=None, stacktrace=None)

Bases: selenium.common.exeptions.WebDriverException

当driver设置cookie失败时抛出

exception selenium.common.exceptions.UnexpectdAlertPresentException(msg=None, screen=None, stacktrace=None, alert_text=None)

Bases:selenium.common.exceptions.WebDriverException

当未知的警告窗口弹出时抛出 通常阻止执行许多预期命令的webdriver时抛出

exception selenium.common.exceptions.UnexpectedTagNameException(msg=None, scren=None,stacktrace=None)

Bases:selenium.common.exceptions.WebDriverException

当支持的类没有得到预期的web元素时抛出

exception selenium.common.exceptions.WebDriverException(msg=None, screen=None, stacktrace=None)

Bases: exceptions.Exception

Webdriver 基本异常

动作链

该动作链实施,

class selenium.webdriver.common.action_chains.ActionChains(driver)
    Base:object
    ActionChains是底层自动化交互,比如鼠标移动,鼠标按键操作,按键和上下文交互菜单。可以用来做一些负责的动作比如悬停和拖放等。
    生成用户操作
    当你调用ActionChains 类的一些方法实现动作,这些动作可以存储到ActionChains类中。当你调用perform(),这些事件会顺序发射执行。
    action_chains可以在链模式中使用:

        menu = driver.find_element_by_css_selector(".nav")
        hidden_submenu = driver.find_element_by_css_selector(".new #submen1")
        
        action_chains(driver).move_to_element(menu).click(hidden_submenu).perform()
        
    或动作一个接一个顺序执行:
      menu = driver.find_element_by_css_selector(".nav")
      hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
      
      actions = ActionChains(driver)
      actions.move_to_elment(menu)
      actions.click(hidden_submenu)
      actions.perform()
      
    无论哪种方式,这些动作都会顺序调用执行。

    click(on_element=None)
        点击一个元素

        Args: * on_element: 鼠标点击元素,如果没有,点击当前鼠标的位置。

    click_and_hold(on_elememt=None)
        按住在元素上按住鼠标左键
        Args: * on_element: 鼠标点击元素,没有,点击当前鼠标的位置

    context_click(on_element=None)

        在元素上右击
        Args: * on_element: 上下文点击该元素,如果没有,点击鼠标当前的位置

    double_click(on_element=None)

        双击元素
        Args: * on_element: 双击该元素,如果,双击鼠标当前的位置

    drag_and_drop(source, target)
        source element 左击并保持
        然后移动到目标元素并且是否鼠标

        Args: * source: 鼠标按下的元素
             * target: 鼠标移动到元素
             
    drag_and_drop_by_offset(source, xoffset, yoffset)
        左击点击source element,
        然后,移动到目标偏移地址,并释放鼠标

        Args: * source: 鼠标点击的元素
              * xoffset: 元素移动的X偏移量
              * yoffset: 元素移动的Y偏移量

    key_down(value, element=None)
        仅发送一个按键,不释放(多用于组合键)
        需要和修饰键一起使用(控制,altshift)
        Aargs:
            * value: 被发送的修饰键,在Keys类中定义
            * element: 发送键作用的元素。如果为空,则向作用于当前焦点元素

        例如,按下ctrl+c:
            ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

    key_up(value, element=None)
        释放修饰键
        Aargs: 
            * value: 发送的修饰键盘,在Keys类中定义。
            * element: 作用于的元素,如果为空,默认作用于当前焦点元素
        例如,按下ctrl+c:
            ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

    move_by_offset(xoffset, yoffset)
        从当前鼠标位置,移动一定的偏移位置
        Aargs:
            * xoffset: X偏移量,可以为正或负的整数
            * yoffset: y偏移量,可以为正或负的整数

    move_to_element(to_element)
        移动鼠标到元素的中间
        Args: * to_element: 移动的目标WebElement

    move_to_element_with_offset(to_element, xoffset, yoffset)
        指定元素偏移一定量
            偏移量相对于元素的左上角
        Args: * to_elemnt: 被移动的WebElement
              * xoffset: x偏移量
              * yoffset: y偏移量

    perform()
        执行所有存储的操作

    release(on_element=None)
        释放作用于元素的按键
        Args: * on_element: 指定作用的元素,如果为空,释放当前鼠标作用的位置

    send_keys(*keys_to_send)
        发送按键到当前焦点元素
        Args: * keys_to_send: 发送的按键。修饰键常量可以在‘Keys'类中找到

    send_keys_to_element(element, *keys_to_send)
        发送按键到一个元素
        Args: * element: 发送按键作用的元素
              * keys_to_send: 发送的按键类型,修饰键常量可以在“Keys'类中找到。

Top^

上一篇Selenium主题6 下一篇Selenium主题8

by 李鹏