场景

测试对象的定位和操作是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学习--简单对象定位的更多相关文章

  1. python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转。

    python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转. 如果多次定位和click(),有时候会跳转. 我遇到很多次就是很郁闷,有人说,操作太快的,页 ...

  2. 【python+selenium学习】Python常见错误之:IndentationError: unexpected indent

    初入python+selenium学习之路,总会遇到这样那样的问题.IndentationError: unexpected indent,这个坑我已经踏进数次了,索性记录下来.都知道Python对代 ...

  3. Python selenium根据class定位页面元素

    在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的.但是实际工作中,很多前端开发人员并未给每个元素都编写id属性.通常一段html代码如下: <div cl ...

  4. Python+Selenium学习--自动化测试模型

    前言 一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库.测试数据源.测试对象识别标准,以及种可重用的模块.自动化测试框架在发展的过程中经历了几个阶段,模块驱动测试.数据驱动测试.对 ...

  5. Python+Selenium学习笔记15 - 读取txt和csv文件

    读取txt的内容并用百度查找搜索 1 # coding = utf-8 2 3 from selenium import webdriver 4 import time 5 6 # 打开浏览器 7 d ...

  6. Python+Selenium学习--定位iframe中的对象

    场景 在web 应用中经常会出现frame 嵌套的应用,假设页面上有A.B 两个frame,其中B 在A 内,那么定位B 中的内容则需要先到A,然后再到B.      switch_to_frame ...

  7. Python+Selenium学习--定位一组对象

    场景 从上一节的例子中可以看出,webdriver可以很方便的使用find_element方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用find_elements方法. ...

  8. Python+selenium学习(二) selenium 定位不到元素

    转载:https://www.cnblogs.com/tarrying/p/9681991.html tarrying selenium的三种等待时间 //隐式等待(20秒以内没哥一段时间就会去找元素 ...

  9. Python+Selenium学习笔记6 - 定位

    1.8种针对单个元素的定位方法 find_element_by_id() find_element_by_name() find_element_by_class_name() find_elemen ...

随机推荐

  1. react-native 相对项目路径导入组件

    在使用react-native的时候,经常要自定义很多组件,但是只能使用../../../的方式,如果目录多了一长串,书写很烦,看着也不好看. 方法一: 例如你想引入utils里面的文件,不想../. ...

  2. es6新特性之箭头函数

    <script> { // es3,es5 var evens = [1, 2, 3, 4, 5]; var odds = evens.map(function (v) { return ...

  3. 翻转单链表 leetcode Reverse Linked List

    翻转一个单链表.这个题目听说很多次了,总感觉肯定不是什么难题. 现在真的有点好高骛远了!总感觉那种很难的算法题才是难题,这种题没必要做.其实眼高手低啊. 这种easy题,我都不能一遍ac,这遇到白板编 ...

  4. jquery接触初级-----ajax 之:load()方法

    jquery _ajax 请求主要有几种方式:load(),$.get(),$.post(),$.ajax(),$.getScript(),$.getJson() 1.load()方法 格式:load ...

  5. JavaScript:几种常用循环

    ##循环数组的方法 1.for循环 for(let i = 0;i < ary.length;i++){ console.log(ary[i]); } 2.forEach ary.forEach ...

  6. JSP基本_EL式

    1.EL式下記二種類がある.① ${式} : JSPの出力(レンダリング)時に評価 (JSP2.0から)② #{式} : タグハンドラにより任意のタイミングで評価 (JSP2.1から) 2.オブジェク ...

  7. Servlet基本

    1.Webサーバ設定の「ディレクトリ一覧」機能 Webサーバの設定で「ディレクトリ一覧」機能を有効にすると.404 Not Found画面ではなく.ディレクトリ以下のファイルの一覧が表示されます.この ...

  8. cxgrid中回车键光标移到下列

    OptionsBehavior.GoToNextCellOnEnter:=True; 更完善的回车 可以在焦点到了最后一列再回车时有下一行则移到下一行的第一列,没有下一行则新增记录并移到第一列 pro ...

  9. Linux命令:chown

    Linux命令:chmod https://baijiahao.baidu.com/s?id=1616750933810368135&wfr=spider&for=pc chmod - ...

  10. git使用——分支

    创建dev分支,并切换到dev分支. git checkout -b dev //Switched to a new branch 'dev' 查看分支. git branch //* dev &qu ...