標籤: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學習--簡單對象定位