Python+Selenium學習--簡單對象定位

來源:互聯網
上載者:User

標籤:partial   class   href   自動   abs   att   min   csrf   ace   

情境

測試對象的定位和操作是webdriver的核心內容,其中操作又是建立在定位的基礎之上,因此對象定位就越發顯得重要了。

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

  • 操作對象
  • 獲得對象的屬性,如獲得測試對象的class屬性,name屬性等等
  • 獲得對象的text
  • 獲得對象的數量

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

  • id
  • name
  • class name
  • link text
  • partial link text
  • tag name
  • xpath
  • css selector
代碼login.html
<!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8">    <title></title>    <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css"/>    <link rel="stylesheet" href="/static/plugins/font-awesome/css/font-awesome.css"/>    <link rel="stylesheet" href="/static/css/edmure.css"/>    <link rel="stylesheet" href="/static/css/commons.css"/>    <link rel="stylesheet" href="/static/css/account.css"/></head><body><div class="login">    <form id="fm" method="POST" action="/login.html">        {% csrf_token %}        <div class="form-group">            <label for="username">使用者名稱</label>            <input type="text" class="form-control" name="username" id="username" placeholder="請輸入使用者名稱">        </div>        <div class="form-group">            <label for="password">密碼</label>            <input type="password" class="form-control" name="password" id="password" placeholder="請輸入密碼">        </div>        <div class="form-group">            <label for="password">驗證碼</label>            <div class="row">                <div class="col-xs-7">                    <input type="text" class="form-control" name="check_code" id="check_code" placeholder="請輸入驗證碼">                </div>                <div class="col-xs-5">                    <img id="check_code_img" src="/check_code.html">                </div>            </div>        </div>        <div class="checkbox">            <label>                <input type="checkbox" value="1" name="rmb"> 一個月內自動登陸            </label>            <div class="right">                <a href="#">忘記密碼?</a>            </div>        </div>        <div class="row">            <div class="col-xs-3">                <a id="submit" class="btn btn-default">登 陸</a>            </div>            <div class="col-xs-9" style="padding-left: 0;">                <div class="alert alert-danger hide">                    <span style="padding: 0 5px 0 5px;display: inline-block;font-size: 14px">                        <i class="fa fa-minus-circle" aria-hidden="true"></i>                    </span>                    <span id="error_msg" style="font-size: 12px;"></span>                </div>            </div>        </div>    </form>    <script src="/static/js/jquery-1.12.4.js"></script>    <script type="text/javascript">        $(function () {            bindLogin();        });        function bindLogin() {            $(‘#submit‘).click(function () {                var $msg = $(‘#error_msg‘);                $msg.parent().addClass(‘hide‘);                $.ajax({                    url: ‘/login.html‘,                    type: ‘POST‘,                    data: $(‘#fm‘).serialize(),                    dataType: ‘JSON‘,                    success: function (arg) {                        if(arg.status){                            location.href = ‘/‘                        }else{                            $msg.parent().removeClass(‘hide‘);                            $msg.text(arg.message);                            var img = $(‘#check_code_img‘)[0];                            img.src = img.src + ‘?‘;                            $(‘#password,#check_code‘).val(‘‘);                        }                    }                })            })        }    </script></div></body></html>
 python代碼
#!/usr/bin/env python# -*- coding:utf-8 -*-‘‘‘Created on 2018/5/9 11:35@author: Jeff Lee@file: 簡單的對象定位.py‘‘‘from selenium import webdriverfrom time import sleepimport osif‘HTTP_PROXY‘in os.environ:    del os.environ[‘HTTP_PROXY‘]dr = webdriver.Firefox()file_path =‘file://‘+ os.path.abspath(‘login.html‘)print (file_path)dr.get(file_path)# by idprint(‘通過id進行定位‘)dr.find_element_by_id(‘username‘).click()sleep(1)# by nameprint(‘通過name進行定位‘)dr.find_element_by_name(‘password‘).click()sleep(1)# by tagnameprint(‘通過tag進行定位‘)print (dr.find_element_by_tag_name(‘form‘).get_attribute(‘id‘))sleep(1)# by class_nameprint(‘通過class進行定位‘)e = dr.find_element_by_class_name(‘form-control‘)try:    dr.execute_script(‘$(arguments[0]).fadeOut().fadeIn()‘, e)except Exception as e:    print(‘沒有JS‘)sleep(1)# by link textprint(‘通過link文本進行定位‘)link = dr.find_element_by_link_text(‘忘記密碼?‘)try:    dr.execute_script(‘$(arguments[0]).fadeOut().fadeIn()‘, link)except Exception as e:    print(‘沒有JS‘)sleep(1)# by partial link textprint(‘通過 部分link文本 進行定位‘)link = dr.find_element_by_partial_link_text(‘忘記‘)try:    dr.execute_script(‘$(arguments[0]).fadeOut().fadeIn()‘, link)except Exception as e:    print(‘沒有JS‘)sleep(1)# by css selector#print(‘通過 css selector 進行定位‘)#div = dr.find_element_by_css_selector(‘.controls‘)#dr.execute_script(‘$(arguments[0]).fadeOut().fadeIn()‘, div)#sleep(1)# by xpathprint(‘通過 xpath 進行定位‘)dr.find_element_by_xpath(‘/html/body/div/form/div[3]/div/div/input‘).click()sleep(2)dr.quit()
 討論 

上面例子裡由於html檔案中引用了jquery,所以在執行js時可以使用jquery的$()及fadeIn()等方法。如果你測試的頁面沒用包含jquery的話,這些方法是無效的。

Python+Selenium學習--簡單對象定位

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.