qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          輕松自動化---selenium-webdriver(python) (三)

           本節重點:

            簡單對象的定位

            -----自動化測試的核心

            對象的定位應該是自動化測試的核心,要想操作一個對象,首先應該識別這個對象。一個對象就是一個人一樣,他會有各種的特征(屬性),如比我們可以通過一個人的身份證號,姓名,或者他住在哪個街道、樓層、門牌找到這個人。

            那么一個對象也有類似的屬性,我們可以通過這個屬性找到這對象。

            定位對象的目的一般有下面幾種

            · 操作對象

            · 獲得對象的屬性,如獲得測試對象的class屬性,name屬性等等

            · 獲得對象的text

            · 獲得對象的數量

            webdriver提供了一系列的對象定位方法,常用的有以下幾種

            · id

            · name

            · class name

            · link text

            · partial link text

            · tag name

            · xpath

            · css selector

            我們可以看到,一個百度的輸入框,可以用這么用種方式去定位。

          #coding=utf-8

          from selenium import webdriver
          import time

          browser = webdriver.Firefox()

          browser.get("http://www.baidu.com")
          time.sleep(2)

          #########百度輸入框的定位方式##########

          #通過id方式定位
          browser.find_element_by_id("kw").send_keys("selenium")

          #通過name方式定位
          browser.find_element_by_name("wd").send_keys("selenium")

          #通過tag name方式定位
          browser.find_element_by_tag_name("input").send_keys("selenium")

          #通過class name 方式定位
          browser.find_element_by_class_name("s_ipt").send_keys("selenium")

          #通過CSS方式定位
          browser.find_element_by_css_selector("#kw").send_keys("selenium")

          #通過xphan方式定位
          browser.find_element_by_xpath("http://input[@id='kw']").send_keys("selenium")

          ############################################

          browser.find_element_by_id("su").click()
          time.sleep(3)
          browser.quit()

            OK~!通過上面一個例子,就幫我們展示了幾種定位方式,下面來介紹每種定位方式:

            id 和 name

            --------------------------------------------------------------------------------

            id 和 name 是我們最最常用的定位方式,因為大多數控件都有這兩個屬性,而且在對控件的id 和name命名時一般使其有意義也會取不同的名字。通過這兩個屬性使我們找一個頁面上的屬性變得相當容易

            我們通過前端工具,找到了百度輸入框的屬性信息,如下:

            <input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

            id=”kw”

            通過find_element_by_id("kw") 函數就是捕獲到百度輸入框

            name=”wd”

            通過find_element_by_name("wd")函數同樣也可以捕獲百度輸入框

            tag name 和class name

            --------------------------------------------------------------------------------

            從上面的百度輸入框的屬性信息中,我們看到,不單單只有id 和 name兩個屬性,比如class 和 tag name(標簽名)

            <input>

            input 就是一個標簽的名字,可以通過find_element_by_tag_name("input") 函數來定位。

            class="s_ipt"

            通過find_element_by_class_name("s_ipt")函數捕獲百度輸入框。

            但是,碰下面的一組控件屬性,我們就哭了。

          <th width="95"></th>
          <th width="">文件名</th>
          <th class="c1">創建時間</th>
          <th class="c1">狀態</th>
          <th class="c1">文件大小</th>
          <th class="c1">時長</th>

            下面的css 和 XPath就沒有上面的那么直觀,如果不懂前端的話可能不太好理解

            CSS定位

            --------------------------------------------------------------------------------

            CSS(Cascading Style Sheets)是一種語言,它被用來描述HTML和XML文檔的表現。CSS使用選擇器來為頁面元素綁定屬性。這些選擇器可以被selenium用作另外的定位策略。

            CSS的比較靈活可以選擇控件的任意屬性,上面的例子中:

            find_element_by_css_selector("#kw")

            通過find_element_by_css_selector( )函數,選擇取百度輸入框的id屬性來定義

            也可以取name屬性

          <a href=http://news.baidu.com name="tj_news">新 聞</a>
          driver.find_element_by_css_selector("a[name=\"tj_news\"]").click()

            可以取title屬性

          <a onclick="queryTab(this);" mon="col=502&pn=0" title="web" href=http://www.baidu.com/>網頁</a>driver.find_element_by_css_selector("a[title=\"web\"]").click()

            也可以是取..:

          <a class="RecycleBin xz" href="javascript:void(0);">
          driver.find_element_by_css_selector("a.RecycleBin").click()

            雖然我也沒全部理解CSS的定位,但是看上去應該是一種非常靈活和牛X 的定位方式

            擴展閱讀:

            http://www.w3.org/TR/css3-selectors/

            http://www.w3school.com.cn/css/css_positioning.asp

          XPath

            --------------------------------------------------------------------------------

            什么是XPath:http://www.w3.org/TR/xpath/

            XPath基礎教程:http://www.w3schools.com/xpath/default.asp

            selenium中被誤解的XPath : http://magustest.com/blog/category/webdriver/

            XPath是一種在XML文檔中定位元素的語言。因為HTML可以看做XML的一種實現,所以selenium用戶可是使用這種強大語言在web應用中定位元素。

            XPath擴展了上面id和name定位方式,提供了很多種可能性,比如定位頁面上的第三個多選框。

          xpath:attributer (屬性)
          driver.find_element_by_xpath("http://input[@id='kw']").send_keys("selenium")
          #input標簽下id =kw的元素

          xpath:idRelative (id相關性)
          driver.find_element_by_xpath("http://div[@id='fm']/form/span/input").send_keys("selenium")
          #在/form/span/input 層級標簽下有個div標簽的id=fm的元素
          driver.find_element_by_xpath("http://tr[@id='check']/td[2]").click()
          # id為'check' 的tr ,定閃他里面的第2個td

          xpath:position (位置)
          driver.find_element_by_xpath("http://input").send_keys("selenium")
          driver.find_element_by_xpath("http://tr[7]/td[2]").click()
          #第7個tr 里面的第2個td

          xpath: href (水平參考)
          driver.find_element_by_xpath("http://a[contains(text(),'網頁')]").click()
          #在a標簽下有個文本(text)包含(contains)'網頁' 的元素
          xpath:link
          driver.find_element_by_xpath("http://a[@).click()
          #有個叫a的標簽,他有個鏈接href='http://www.baidu.com/ 的元素

            link 定位

            --------------------------------------------------------------------------------

            有時候不是一個輸入框也不是一個按鈕,而是一個文字鏈接,我們可以通過link

          #coding=utf-8

          from selenium import webdriver
          import time

          browser = webdriver.Firefox()

          browser.get(http://www.baidu.com)
          time.sleep(2)
              
          browser.find_element_by_link_text("貼 吧").click()
          time.sleep(2)
          browser.quit()

            一般一個那頁面上不會出現相同的文件鏈接,通過文字鏈接來定位也是一種簡單有效的定位方式。

            Partial Link Text 定位

            --------------------------------------------------------------------------------

            通過部分鏈接定位,這個有時候也會用到,我還沒有想到很好的用處。拿上面的例子,我可以只用鏈接的一部分文字進行匹配:

          browser.find_element_by_partial_link_text("貼").click()
          #通過find_element_by_partial_link_text() 函數,我只用了“貼”字,腳本一樣找到了"貼 吧" 的鏈接

          相關文章:

          輕松自動化---selenium-webdriver(python) (二)

          輕松自動化---selenium-webdriver(python) (四)

          posted on 2013-08-12 09:59 順其自然EVO 閱讀(315) 評論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動化測試學習

          <2013年8月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 贵定县| 遂川县| 沂源县| 涪陵区| 保亭| 平武县| 高州市| 准格尔旗| 桂平市| 开原市| 乐安县| 新宁县| 饶平县| 高雄县| 正蓝旗| 原平市| 龙海市| 南平市| 客服| 鹿泉市| 建水县| 恩施市| 怀宁县| 庆元县| 白沙| 永城市| 新晃| 平武县| 云和县| 宁津县| 桂平市| 建昌县| 隆昌县| 武义县| 北碚区| 宣化县| 莱芜市| 金阳县| 中卫市| 那曲县| 疏附县|