Python+Selenium学习--简单对象定位

场景

测试对象的定位和操作是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的话,这些方法是无效的。

原文地址:https://www.cnblogs.com/uniquefu/p/9017999.html

时间: 2024-11-05 15:43:34

Python+Selenium学习--简单对象定位的相关文章

Web自动化测试 四 ----- python selenium 八大元素定位

python selenium 八大元素定位方法 前提条件:先要引入webdriver模块,创建一个Chrom浏览器对象,以及打开一个网页(以百度为例). 1 from selenium import webdriver 2 3 driver = webdriver.Chrome() 4 5 driver.get('http://www.baidu.com') 一.ID定位 driver.find_element_by_id('kw') 备注: 此方法相当于JS中的getElementById(

Python selenium根据class定位页面元素

在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的.但是实际工作中,很多前端开发人员并未给每个元素都编写id属性.通常一段html代码如下: 1 <div class="sui-tips s-isindex-wrap sui-tips-exceedtipnews" style="display: none; width: auto;"><div class="sui-tips-arrow"

Python+Selenium学习(三)-Xpath的使用

今天学习了几个关于自动化的概念. 元素,网页元素(web element).在页面上面的文本输入框.按钮.多选.单选.标签.和文字都叫元素,总之,凡是能在页面显示的对象都可以作文页面元素对象. 元素定位,有时候也叫Locator,一个HTML页面元素,可以用很多方法描述这样元素的位置.网页元素有自己的位置,可以通过一些手段或者表达式去描述这个元素的页面对应位置. XPath,XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言.XPath基于XML

Python+Selenium学习笔记6 - 定位

1.8种针对单个元素的定位方法 find_element_by_id() find_element_by_name() find_element_by_class_name() find_element_by_tag_name() find_element_by_link_text() find_element_by_partial_link_text() find_element_by_xpath() find_element_by_css_selector() 2..8种针对多个元素的定位方

3 Python+Selenium的元素定位方法(id、class name、name、tag name)

[环境] Python3.6+selenium3.0.2+IE11+Win7 [定位方法] 1.通过ID定位 方法:find_element_by_id('xx') 2.通过name定位 方法:find_element_by_name('xx') 3.通过class name定位 方法:find_element_by_class_name('xx') 4.通过tag name定位 方法:find_element_by_tag_name('xx') 说明:tag name在html中是标签的名字,

selenium学习:定位一组元素

文件名:checkbox.html <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <title>Checkbox</title> <link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css&

selenium学习笔记——定位元素

这里介绍的自动化脚本是java编写的,python编写的以后会更新(看学会python的时间O(∩_∩)O~) ?(^?^*) 先介绍一下自动化测试吧~其实自动化测试是个广泛的概念,一般分为三种:自动化单元测试.自动化接口测试和UI自动化测试.自动化单元测试在国外占比70%,国内占比10%:自动化接口测试国外占比20%,国内占比20%,UI自动化测试国内占比70%,国外占比10%.这里说的占比也只是大概数据.也就是说国内现在自动化,大部分还只是UI自动化,接口自动化也只是小部分.有些公司,UI自

uniquefu Python+Selenium学习--前进和后退

场景 这两个功能一般不太常用.所能想到的场景大概也就是在几个页面间来回跳转,省去每次都get url. 代码 #!/usr/bin/env python # -*- coding:utf-8 -*- ''' Created on 2018/5/9 11:26 @author: Jeff Lee @file: 前进和后退.py ''' from selenium import webdriver import time print('打开浏览器') cl = webdriver.Firefox()

uniquefu Python+Selenium学习--打印当前页面的title及url

场景 测试中,访问1个页面然后判断其title是否符合预期是很常见的1个用例,所谓用例不够,title来凑就是这个道理.更具体一点,假设1个页面的title应该是'hello world', 那么可以写这样的一个用例:访问该页面,获取该页面的title,判断获取的值是否等于'hello world'. 获取当前页面的url也是非常重要的一个操作.在某些情况下,你访问一个url,这时系统会自动对这个url进行跳转,这就是所谓的'重定向'.一般测试重定向的方法是访问这个url,然后等待页面重定向完毕