• Selenium Python bindings 文档二


    2012年5月13日 随笔档案 - 小楼 - 博客园

    3 跳转

    使用Webdriver要做的第一件事情是跳转到一个页面。一般的方式是通过调用get方法。

    driver.get("http://www.python.org")

    WebDriver在返回对测试或脚本的控制之前一直等到页面完全载入为止。但是如果页面使用了很多AJAX,WebDriver也许不知道什么时候页面会完全载入,就不值得这么做了。如果你需要确保这样的页面完全载入,可以使用waits方法。

    3.1 与页面交互

    只是能到达页面并不是十分有用,我们很想做的是与页面交互。或者,更精确地。与页面里的HTML元素。首先,我们需要找到一个元素。WebDriver提供了很多方法来需找元素。假设一个元素定义为:

    <input type="text" name="passwd" id="passwd-id" />

    你可以使用以下方法去找到这个元素:

    Element = driver.find_element_by_id(“passwd_id”)

    Element = driver.find_element_by_name(“passwd”)

    Element = driver.find_element_by_xpath(“/input[@id=’passwd-id’]”)

    还可以通过文字找到一个链接,但是要小心!这个文字必须是完全匹配!在WebDriver里使用XPATH也要小心。 如果有多个元素满足查询,将只有第一个满足条件的被返回。如果没有发现任何元素,将会报NoSuchElementException。

    WebDriver 有一个基于对象的API。我们使用相同的接口来代表各种元素。这意味着在使用IDE的自动完成功能的时候,你或许看到很多可以调用的方法。但是不是所有的都行得通或者可行。但是无需担心!WebDriver将试图去做正确的事情,而且如果你调用了一个行不通的方法,会抛出一个异常。

    你得到了一个元素,你能做什么呢?首先,你也许想在输入框中输入一段文字。

    Element.send_keys(“some text”)

    你可以通过Keys类模仿按箭头键

    Element.send_keys(“and some”, Keys.ARROW_DOWN)

    在任意元素上都是可以调用send_keys的,这使得测试键盘快捷键比如用在Gmail上的,成为可能。一个副作用是在输入框中输入字符将不会自动清空。反而,你输入的将会被添加在已有文本之后。你可以很容易使用clear方法清空输入框或输入区域的内容。

    Element.clear()

    3.2 填充表单

    我们已经看到如何在输入框里输入字符,但是,其他元素呢?你可以选择选择框的状态,你可以使用setSelected来设置比如选项标签为选中状态。处理SELECT选项并不是太坏。

    Select = driver.find_element_by_xpath(“//select”)

    All_options = select.find_element_by_tag_name(“option”)

    For option in all_options:

    Print “value is: %s” %option.get_attribute(“value”)

    Option.click()

    这将会发现页面上第一个SELECT元素,然后循环通过每一根的OPTION,打印出他们的值,然后依次选中每个。

    当你完成填充表单之后,你也许想提交它。一个办法是找到submit按钮并点击它。

    # Assume the button has the ID “submit”

    Driver.find_element_by_id(‘submit’).click()

    或者,WebDriver在每个元素上都有很方便的submit方法。如果你在一个form的元素上调用这个方法,WebDriver将会查询DOM树,直至发现包含它的form然后调用submit。如果元素没有在form里面,将会抛出NoSuchElementExcellent

    Element.submit()

    3.3 托和拽

    Element = driver.find_element_by_name(“source”)

    Target = driver.find_element_by_name(“target”)

    From selenium.webdriver import ActionChains

    Action_chains = ActionChains(driver)

    Action_chains.drag_and_drop(element, target)

    3.4 在窗口和帧之间移动

    在现在的web应用中很少窗口里没有任何帧。WebDriver支持使用switch_to_window方法在命名窗口里移动。

    Driver.switch_to_window(“windowName”)

    所有对driver的调用现在都被解释为直接到特定的窗口。但是如何知道窗口的名字?看一下打开窗口的javascript或者链接。

    <a href=”somewhere.html” target=”windowName”>Click here to open a new window</a>

    作为选择,你可以传一个窗口句柄给switch_to_window()方法。知道这个,就可以再每个打开的窗口之间迭代访问

    For handle in driver.window_handlers:

    Driver.switch_to_window(handle)

    也可以在帧之间切换

    Driver.switch_to_frame(“frameName”)

    也可以通过用点分解路径访问子帧,可以通过指定index来确定帧。

    Driver.switch_to_frame(frameName.0.child)

    3.5 弹出窗口

    Selenium WebDriver有对处理弹出窗口的内置支持。在你激发一个动作可以打开一个弹出窗口,你可以通过以下方式访问alert。

    Alert = driver.switch_to_alert()

    这将返回当前打开的警告对象。通过这个对象,你可以接受,取消,读取它的内容或甚至在提示里输入内容。这个借口在警告,确认,提示里工作的一样好。

    3.6 导航:历史和定位

    早先,我们使用get方法来涵盖跳转。如你所见,WebDriver有很多更小的,任务集中的接口,导航是一个很有用的任务。为了跳转到一个页面,你可以使用get方法:driver.get(“http://www.example.com”)

    为了在浏览器历史里向前或向后移动:

    Driver.forward()

    Driver.back()

    请注意这个功能完全依赖于潜在的驱动。

    3.7 Cookies

    Driver.get(“http://www.example.com”)

    # Now set the cookie. This one is valid for the entire domain

    Cookie = {“key”: “value”}

    Driver.add_cookie(cookie)

    # And now output all the available cookies for the current URL

    All_cookies = driver.get_cookies()

    For cookie_name, cookie_value in all_cookies.items():

    Print “%s -> %s”, cookie_name, cookie_value

    4 定位元素

    有很多种在页面上定位元素的策略。你可以使用对你case最合适的那种。Selenium提供下列方法来定位页面上的元素

    Find_element_by_id

    Find_element_by_name

    Find_element_by_xpath

    Find_element_by_link_text

    Find_element_by_partial_link_text

    Find_element_by_tag_name

    Find_element_by_class_name

    Find_element_by_css_selector

    发现多个元素(这些方法将返回一个列表)

    Find_elements_by_name

    Find_elements_by_xpath

    Find_elements_by_link_text

    Find_elements_by_partial_link_text

    Find_elements_by_tag_name

    Find_elements_by_class_name

    Find_elements_by_css_selector

    4.1 通过ID定位元素

    当你知道元素的id属性的时候使用这个方法。通过这个策略,匹配定位的第一个具有id属性的元素将被返回,如果没有元素具有id属性,抛出NoSuchElementException。

    例如,考虑下页面源文件

    <html>

     <body>

      <form id="loginForm">

       <input name="username" type="text" />

       <input name="password" type="password" />

       <input name="continue" type="submit" value="Login" />

      </form>

     </body>

    <html>

    Form元素可以被如此定位:login_form = driver.find_element_by_id(“loginForm”)

    4.2 通过名字定位

    当你知道元素的name属性的时候使用这个方法。通过这个策略,匹配定位的第一个具有name属性的元素将被返回,如果没有元素具有name属性,抛出NoSuchElementException。

    例如,考虑下页面源文件

    <html>

     <body>

      <form id="loginForm">

       <input name="username" type="text" />

       <input name="password" type="password" />

       <input name="continue" type="submit" value="Login" />

       <input name="continue" type="button" value="Clear" />

      </form>

    </body>

    <html>

    用户名和密码元素可以如下定位:

    Username = driver.find_element_by_name(“username”)

    Password = driver.find_element_by_name(“password”)

    Continue = driver.find_element_by_name(“Continue”)

    4.3 通过xpath定位

    Xpath是用来在XML文档中定位节点的语言。

    例如,考虑下页面源文件

    <html>

     <body>

      <form id="loginForm">

       <input name="username" type="text" />

       <input name="password" type="password" />

       <input name="continue" type="submit" value="Login" />

       <input name="continue" type="button" value="Clear" />

      </form>

    </body>

    <html>

    Form元素可以如下定位:

  • 相关阅读:
    js数组直接赋值会导致一个数组改变,另一个数组会随之改变(解决办法)
    css兼容性问题
    12种CSS BUG解决方法与技巧
    js的运算小数点的问题
    DataTable相关操作,筛选,取前N条数据,去重复行,获取指定列数据
    js得到区域长宽
    DataView.RowFilter筛选DataTable中的数据
    图片加载问题
    kissy延迟加载demo
    解决css兼容性
  • 原文地址:https://www.cnblogs.com/lexus/p/2594115.html
Copyright © 2020-2023  润新知