qileilove

          blog已經(jīng)轉移至github,大家請訪問 http://qaseven.github.io/

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

          本節(jié)要解決的問題:

            層級定位

            場景:

            假如兩個控件,他們長的一模樣,還都叫“張三”,唯一的不同是一個在北京,一個在上海,那我們就可以通過,他們的城市,區(qū),街道,來找到他們。

            在實際的測試中也經(jīng)常會遇到這種問題:頁面上有很多個屬性基本相同的元素,現(xiàn)在需要具體定位到其中的一個。由于屬性基本相當,所以在定位的時候會有些麻煩,這時候就需要用到層級定位。先定位父元素,然后再通過父元素定位子孫元素。

          <html>
              <head>
                  <meta http-equiv="content-type" content="text/html;charset=utf-8" />
                  <title>Level Locate</title>       
                  <script type="text/javascript" async="" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
                  <link href=http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css rel="stylesheet" />       
              </head>
              <body>
                  <h3>Level locate</h3>
                  <div class="span3">       
                      <div class="well">
                          <div class="dropdown">
                              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link1</a>
                              <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel" id="dropdown1" >
                                  <li><a tabindex="-1" href="#">Action</a></li>
                                  <li><a tabindex="-1" href="#">Another action</a></li>
                                  <li><a tabindex="-1" href="#">Something else here</a></li>
                                  <li class="divider"></li>
                                  <li><a tabindex="-1" href="#">Separated link</a></li>
                              </ul>
                          </div>               
                      </div>           
                  </div>
                  <div class="span3">       
                      <div class="well">
                          <div class="dropdown">
                              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link2</a>
                              <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel" >
                                  <li><a tabindex="-1" href="#">Action</a></li>
                                  <li><a tabindex="-1" href="#">Another action</a></li>
                                  <li><a tabindex="-1" href="#">Something else here</a></li>
                                  <li class="divider"></li>
                                  <li><a tabindex="-1" href="#">Separated link</a></li>
                              </ul>
                          </div>               
                      </div>           
                  </div>
              </body>
              <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
          </html>

            將這段代碼保存復制到記事本中,將保存成level_locate.html文件,(注意,這個頁面需要和我們的自動化腳本放在同一個目錄下)瀏覽器打開:



          這里自制了一個頁面,上面有兩個文字鏈接,點擊兩個鏈接會彈出一模一樣的的兩個下拉菜單,這兩個菜單的屬性基本一樣。那么我如何區(qū)分找到相應的菜單項呢?

            方法如下:

          # -*- coding: utf-8 -*-
          from selenium import webdriver
          from selenium.webdriver.support.ui import WebDriverWait
          import time
          import os

          dr = webdriver.Firefox()
          file_path =  'file:///' + os.path.abspath('level_locate.html')
          dr.get(file_path)

          #點擊Link1鏈接(彈出下拉列表)
          dr.find_element_by_link_text('Link1').click()

          #找到id 為dropdown1的父元素
          WebDriverWait(dr, 10).until(lambda the_driver: the_driver.find_element_by_id('dropdown1').is_displayed())
          #在父親元件下找到link為Action的子元素
          menu = dr.find_element_by_id('dropdown1').find_element_by_link_text('Action')

          #鼠標定位到子元素上
          webdriver.ActionChains(dr).move_to_element(menu).perform()

          time.sleep(2)

          dr.quit()

            定位思路:

            具體思路是:先點擊顯示出1個下拉菜單,然后再定位到該下拉菜單所在的ul,再定位這個ul下的某個具體的link。在這里,我們定位第1個下拉菜單中的Action這個選項。

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

            雖然我每行代碼前叫了注釋,但可能還是不太容易理解,因為里面多了不少以前沒見過的新東東。

            WebDriverWait(dr, 10)

            10秒內(nèi)每隔500毫秒掃描1次頁面變化,當出現(xiàn)指定的元素后結束。dr就不解釋了,前面操作webdriver.firefox()的句柄

            is_displayed()

            該元素是否用戶可以見

            class ActionChains(driver)

            driver: 執(zhí)行用戶操作實例webdriver

            生成用戶的行為。所有的行動都存儲在actionchains對象。通過perform()存儲的行為。

            move_to_element(menu)

            移動鼠標到一個元素中,menu上面已經(jīng)定義了他所指向的哪一個元素

            to_element:元件移動到

            perform()

            執(zhí)行所有存儲的行為

            ------------------------------需要我們?nèi)粘9ぷ髦屑毤毱肺丁⒙@些函數(shù)的用法

          其實,啰嗦了這么多,我們只是想達到一種效果,“下拉列表中Action選項處于被選中狀態(tài)”,通過鼠標移動到選項上就達到到了這種效果,但通過程序模擬確實比較麻煩:

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

          相關文章:

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

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

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

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

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 河西区| 明溪县| 安阳县| 和硕县| 八宿县| 天镇县| 肥城市| 林周县| 朝阳区| 巴马| 库尔勒市| 丰镇市| 凌源市| 金湖县| 乾安县| 墨江| 重庆市| 吐鲁番市| 辉南县| 五台县| 雅安市| 理塘县| 涡阳县| 留坝县| 玉山县| 黔东| 扶绥县| 塘沽区| 安丘市| 开远市| 桐城市| 龙山县| 萨嘎县| 勃利县| 无棣县| 开远市| 临沧市| 红原县| 新竹市| 紫云| 米脂县|