qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          輕松自動化---selenium-webdriver(python) (四)-定位一組元素

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

          如何定位一組元素?

           

          場景

          從上一節(jié)的例子中可以看出,webdriver可以很方便的使用findElement方法來定位某個(gè)特定的對象,不過有時(shí)候我們卻需要定位一組對象,

          這時(shí)候就需要使用findElements方法。

           

          定位一組對象一般用于以下場景:

          · 批量操作對象,比如將頁面上所有的checkbox都勾上

          · 先獲取一組對象,再在這組對象中過濾出需要具體定位的一些對象。比如定位出頁面上所有的checkbox,然后選擇最后一個(gè)

          復(fù)制代碼
          <html>     <head>         <meta http-equiv="content-type" content="text/html;charset=utf-8" />         <title>Checkbox</title>         <script type="text/javascript" async="" src="https://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" />         <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>     </head>     <body>         <h3>checkbox</h3>         <div class="well">             <form class="form-horizontal">                 <div class="control-group">                     <label class="control-label" for="c1">checkbox1</label>                     <div class="controls">                         <input type="checkbox" id="c1" />                     </div>                 </div>                 <div class="control-group">                     <label class="control-label" for="c2">checkbox2</label>                     <div class="controls">                         <input type="checkbox" id="c2" />                     </div>                 </div>                 <div class="control-group">                     <label class="control-label" for="c3">checkbox3</label>                     <div class="controls">                         <input type="checkbox" id="c3" />                     </div>                 </div>                              <div class="control-group">                     <label class="control-label" for="r">radio</label>                     <div class="controls">                         <input type="radio" id="r1" />                     </div>                 </div>                                  <div class="control-group">                     <label class="control-label" for="r">radio</label>                     <div class="controls">                         <input type="radio" id="r2" />                     </div>                 </div>             </form>         </div>     </body> </html>
          復(fù)制代碼

          將這段代碼保存復(fù)制到記事本中,將保存成checkbox.html文件。(注意,這個(gè)頁面需要和我們的自動化腳本放在同一個(gè)目錄下

           

           

           

          第一種方法:

          通過瀏覽器打個(gè)這個(gè)頁面我們看到三個(gè)復(fù)選框和兩個(gè)單選框。下面我們就來定位這三個(gè)復(fù)選框。

          復(fù)制代碼
          # -*- coding: utf-8 -*- from selenium import webdriver import time import os  dr = webdriver.Firefox() file_path =  'file:///' + os.path.abspath('checkbox.html') dr.get(file_path)  # 選擇頁面上所有的input,然后從中過濾出所有的checkbox并勾選之 inputs = dr.find_elements_by_tag_name('input') for input in inputs:     if input.get_attribute('type') == 'checkbox':         input.click() time.sleep(2)  dr.quit()
          復(fù)制代碼

          你可以試著把input.get_attribute('type') == 'checkbox' 中的checkbox 變成radio ,那這個(gè)腳本定位的會是兩個(gè)單選框。

           

          第二種定位方法:

          復(fù)制代碼
          # -*- coding: utf-8 -*- from selenium import webdriver import time import os  dr = webdriver.Firefox() file_path =  'file:///' + os.path.abspath('checkbox.html') dr.get(file_path)  # 選擇所有的checkbox并全部勾上 checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]') for checkbox in checkboxes:     checkbox.click() time.sleep(2)  # 打印當(dāng)前頁面上有多少個(gè)checkbox print len(dr.find_elements_by_css_selector('input[type=checkbox]')) time.sleep(2)  dr.quit()
          復(fù)制代碼

          第二種寫法與第一種寫法差別不大,都是通過一個(gè)循環(huán)來勾選控件;如果你學(xué)過上一章的話,細(xì)心的你一定發(fā)現(xiàn)用的定位函數(shù)不一樣,

          第一種用的name ,第二種用的CSS 。

           

           如何去掉勾選:

          還有一個(gè)問題,有時(shí)候我們并不想勾選頁面的所有的復(fù)選框(checkbox),可以通過下面辦法把最后一個(gè)被勾選的框去掉。如下:

          復(fù)制代碼
          # -*- coding: utf-8 -*- from selenium import webdriver import time import os  dr = webdriver.Firefox() file_path =  'file:///' + os.path.abspath('checkbox.html') dr.get(file_path)  # 選擇所有的checkbox并全部勾上 checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]') for checkbox in checkboxes:     checkbox.click() time.sleep(2)  # 把頁面上最后1個(gè)checkbox的勾給去掉 dr.find_elements_by_css_selector('input[type=checkbox]').pop().click() time.sleep(2)  dr.quit()
          復(fù)制代碼

          其實(shí),去掉勾選表也邏輯也非常簡單,就是再次點(diǎn)擊勾選的按鈕。可能我們比較迷惑的是如何找到“最后一個(gè)”按鈕。pop() 可以實(shí)現(xiàn)這個(gè)功能。

          好吧!在web自動化的學(xué)習(xí)過程中,我們必須要知道一些前端的東西,這里擴(kuò)展一下:

          http://www.w3school.com.cn/js/jsref_pop.asp

           

           

          嘗試

          把find_elements_by_css_selector('input[type=checkbox]').pop().click() 中的checkbox 變成radio 會是什么效果,自己嘗試一下吧!

           

           

           

          posted on 2014-03-14 11:19 順其自然EVO 閱讀(1827) 評論(0)  編輯  收藏 所屬分類: 自動化測試python

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 昆山市| 北票市| 平南县| 利川市| 年辖:市辖区| 和静县| 塔城市| 政和县| 湘乡市| 云浮市| 桐梓县| 兴安县| 随州市| 东山县| 贵溪市| 河津市| 象山县| 东城区| 陕西省| 衡阳市| 准格尔旗| 咸宁市| 右玉县| 会理县| 镇赉县| 北碚区| 新民市| 始兴县| 奎屯市| 梨树县| 蓝山县| 堆龙德庆县| 开封市| 璧山县| 汉沽区| 河北省| 景谷| 陇西县| 同仁县| 古浪县| 吉木萨尔县|