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

來源:互聯網
上載者:User

標籤:dna   學習網站   content   png   set   通過   單選   int   https   

http://www.testclass.net/  測試教程網,專業的selenium 學習網站。

本節要解決的問題:

如何定位一組元素?

 

情境

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

這時候就需要使用findElements方法。

 

定位一組對象一般用於以下情境:

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

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

<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>

將這段代碼儲存複製到記事本中,將儲存成checkbox.html檔案。(注意,這個頁面需要和我們的自動化指令碼放在同一個目錄下)

 

 

 

第一種方法:

通過瀏覽器打個這個頁面我們看到三個複選框和兩個單選框。下面我們就來定位這三個複選框。

# -*- coding: utf-8 -*-from selenium import webdriverimport timeimport osdr = 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()

你可以試著把input.get_attribute(‘type‘) == ‘checkbox‘ 中的checkbox 變成radio ,那這個指令碼定位的會是兩個單選框。

 

第二種定位方法:

# -*- coding: utf-8 -*-from selenium import webdriverimport timeimport osdr = 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)# 列印當前頁面上有多少個checkboxprint len(dr.find_elements_by_css_selector(‘input[type=checkbox]‘))time.sleep(2)dr.quit()

第二種寫法與第一種寫法差別不大,都是通過一個迴圈來勾選控制項;如果你學過上一章的話,細心的你一定發現用的定位函數不一樣,

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

 

 如何去掉勾選:

還有一個問題,有時候我們並不想勾選頁面的所有的複選框(checkbox),可以通過下面辦法把最後一個被勾選的框去掉。如下:

# -*- coding: utf-8 -*-from selenium import webdriverimport timeimport osdr = 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個checkbox的勾給去掉dr.find_elements_by_css_selector(‘input[type=checkbox]‘).pop().click()time.sleep(2)dr.quit()

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

好吧!在web自動化的學習過程中,我們必須要知道一些前端的東西,這裡擴充一下:

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

 

 

嘗試

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

 

 

 

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

學習更多selenium 內容:

 「功能測試自動化」匯總

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.