Python+Selenium學習--簡單對象定位
阿新 • • 發佈:2018-05-10
UC boot ria DC exceptio 目的 部分 系列 min
場景
測試對象的定位和操作是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 webdriver from time import sleep import os if‘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 id print(‘通過id進行定位‘) dr.find_element_by_id(‘username‘).click() sleep(1) # by name print(‘通過name進行定位‘) dr.find_element_by_name(‘password‘).click() sleep(1) # by tagname print(‘通過tag進行定位‘) print (dr.find_element_by_tag_name(‘form‘).get_attribute(‘id‘)) sleep(1) # by class_name print(‘通過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 text print(‘通過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 text print(‘通過 部分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 xpath print(‘通過 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學習--簡單對象定位