篇6                            python自动化测试应用-Selenium基础篇

--lamecho

1.1概要

大家好!我是lamecho(辣么丑),上一篇我们搭建好python运行selenium的环境后,接下来当然是来看看怎么去使用它了。其实selenium在操作上和appium是很像的,第一步都是要找元素,通过定位到元素后再去执行动作。好,下面我们将方法穿插到实战中来做演示。

1.2 selenium实战百度页面

在进入实战前,我们先抛开selenium去谈谈web页面。首先我们查找页面元素的方法是直接可以在浏览器中完成的,本文将以chrome浏览器为例,

上图是浏览器的截图,按F12可以打开如上图的调试工具,在定位元素上通过红框圈起来的工具可以很方便的定位元素在页面源码的位置。我这里要说的是,如何做好web页面的自动化测试,前提就是要学会分析我们的网页源码,了解我们元素在页面源码中的依存关系。为什么要这么说,因为很多时候我们都会碰到这样的问题,明明页面上有这个元素为什么我在脚本里去查找就是报错呢?

下面我先介绍几个定位元素的方法,相对于appium文章中介绍的常用方法,selenium中用到的会相对丰富一些。

browser.find_element_by_id()/browser.find_elements_by_id()

browser.find_element_by_tag_name()/browser.find_elements_by_tag_name()

browser.find_element_by_xpath()/browser.find_elements_by_xpath()

browser.find_element_by_link_text()/browser.find_elements_by_link_text()

大家不要感觉少,毕竟我在appium里只介绍了2个,这里有4个了。下面我们先来分析一下我们定位到的页面“登录“元素的源码,我们可以得到哪些信息呢?

<a   href="https://passport.baidu.com/v2/?..ttp%3A%2F%2Fwww.baidu.com%2F" name="tj_login" class="lb" onclick="return false;">登录</a>

1     可以知道该元素的标签,tagname是<a>,并带有链接属性 href

结论:(1)我们可以通过find_element_by_tag_name去定位;

(2)我们可以通过find_element_by_link_text()去定位;

2     在标签<a>里可以知道包含的属性有href,name,class等几个属性

结论:可以通过get_attribute()方法获取这些属性,帮助我们进一步定位

3     可以看到这个元素的text值是“登录“

结论:可以通过.text获取元素的text值,帮助我们进一步定位

我希望大家在刚开始学习selenium时,都要学会这样去分析我们要找的页面元素,因为只有熟悉了元素在页面源码的表现形式及它的上下文的依存关系,我们在定位元素上就会有的放矢,不会出现查找不到的问题了。

废了那么多话,我们终于要进入实战了。先说说我们将要执行的动作,打开百度首页后,操作登录,并在弹出的登录框中输入用户名,密码进行登录操作。

# -*-encoding:utf-8 -*-

from selenium import webdriver

browser=webdriver.Firefox()

browser.maximize_window()

browser.get("https://www.baidu.com/")

#1

browser.implicitly_wait(10)

browser.find_element_by_xpath('//div[@id="u1"]/a[7]').click()

#2

#browser.find_element_by_link_text(u'登录').click()

#3

'''

els=browser.find_elements_by_tag_name('a')

for i in els:

if i.text==u'登录':

i.click()

break

'''

browser.implicitly_wait(10)

browser.find_element_by_id('TANGRAM__PSP_8__userName').send_keys('test')

browser.find_element_by_id('TANGRAM__PSP_8__password').send_keys('test')

browser.find_element_by_id('TANGRAM__PSP_8__submit').click()

sleep(10)

browser.quit()

通过脚本对照我们之前对“登录“元素的源码分析,我在这里通过三种方式去实现了对”登录“的点击。#1是通过xpath查找,我们看看下面的截图,了解xpath的使用方式。

browser.find_element_by_xpath('//div[@id="u1"]/a[7]').click()

首先大家要记住xpath的写法,//div[@id="u1"]是通过一个父层级来定位,对照源码可以清楚的看到登录所在的标签<a>的上一层级<div>这个就是我们要找的父层级,它对应的属性有个id=‘ul’,所以我们通过//div[@id="u1"]可以顺利的找到这一层,紧接着/a[7]下一层就自然的来到我们多个并列的<a>层级了,而“登录“所在的是第7个位置,最终写法就是//div[@id="u1"]/a[7],如果层级不止两级继续往下写/就行了,反斜杠后面跟着tagname。

browser.find_element_by_link_text(u'登录').click()

再来看看这样的写法,由于我们的“登录“是个链接,所以就可以通过link_text去定位。

els=browser.find_elements_by_tag_name('a')

for i in els:

if i.text==u'登录':

i.click()

break

而第三种写法,就稍微复杂了一点。首先它是通过by tagname去找到所有tagname是a的元素集合,然后我们在循环里找到a标签里text值等于“登录“的标签进行点击。

接下来我们看看最后对弹出登录框的操作

browser.implicitly_wait(10)

browser.find_element_by_id('TANGRAM__PSP_8__userName').send_keys('test')

browser.find_element_by_id('TANGRAM__PSP_8__password').send_keys('test')

browser.find_element_by_id('TANGRAM__PSP_8__submit').click()

可以看到3个元素都是通过id去查找,并在找第一个input时用到了智能等待语句。看到这里对selenium有过学习了解的同学可能会问了,这三个元素不是在弹出框里吗,怎么没有先去将我们的browser切换到弹出框再去查找框里的元素呢?在这里我要提醒大家一下,之前培训很多人都会问到这个问题,具体问题要具体对待,就想文章开头讲的在找元素时要先分析元素的页面源码,百度页面这个弹出框在源码中它的依存关系始终都是在原页面上,意思就是我们不需要去切换现有的browser。另外在时间的等待上建议大家回头看看我在《python自动化测试应用-第3篇(APP测试)--Appium元素篇》谈到的时间问题,在实际的工作中我们的自动化脚本中在界面切换时是不应该出现sleep去做等待的,而智能等待implicitly_wait()有时候也不能很好的处理。那么有没有什么好的方法呢,当然有了不过单纯的使用selenium提供的方法就显得捉襟见肘了。在下一篇,selenium使用进阶篇我将给大家阐述我的方法。

1.3 元素篇—结束

怎么样,看完这篇大家是不是对元素的查找有了初步的认识呢,在接下来的一篇文章中,我将带大家进入selenium的进阶使用,如何操作下拉列表,如何在页面中使用js脚本,如何在页面上执行键盘操作,以及对待frame应该怎么找元素,浏览器页面跳转到新的tab后如何在新的tab中继续我们的脚本等等干货。

感谢大家耐心读完,我是lamecho辣么丑。

原创文章,转载请注明出处。新浪微博搜索 “lamecho好棒” 欢迎大家来撩。

微博:https://weibo.com/u/6017986584

博客:http://blog.sina.com.cn/u/6017986584

python自动化测试应用-第6篇(WEB测试)--Selenium元素篇的更多相关文章

  1. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  2. Web测试Selenium:如何选取元素

    Web测试工具Selenium:如何选取元素 2009-02-17 23:23 by 敏捷的水, 5372 阅读, 22 评论, 收藏, 编辑 selenium是一个非常棒的Web测试工具,他对Aja ...

  3. 自动化测试(web测试selenium框架)

    什么是selenium? 一个用于Web应用程序测试的工具直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safa ...

  4. web自动化-selenium 入门篇

    selenium安装介绍 selenium是web浏览器的自动化工具 官网:https://www.selenium.dev 构成: WebDriver: 浏览器提供的浏览器api来控制浏览器(模拟用 ...

  5. selenium + python自动化测试unittest框架学习(三)webdriver元素定位(一)

    1.Webdriver原理 webdirver是一款web自动化操作工具,为浏览器提供统一的webdriver接口,由client也就是我们的测试脚本提交请求,remote server浏览器进行响应 ...

  6. selenium + python自动化测试unittest框架学习(一)selenium原理及应用

    unittest框架的学习得益于虫师的<selenium+python自动化实践>这一书,该书讲得很详细,大家可以去看下,我也只学到一点点用于工作中,闲暇时记录下自己所学才能更加印象深刻. ...

  7. Python爬虫小白入门(五)PhatomJS+Selenium第二篇

    一.前言 前文介绍了PhatomJS 和Selenium 的用法,工具准备完毕,我们来看看如何使用它们来改造我们之前写的小爬虫. 我们的目的是模拟页面下拉到底部,然后页面会刷出新的内容,每次会加载10 ...

  8. selenium + python自动化测试unittest框架学习(三)webdriver元素操作(二)

    上一篇是元素的定位,那么定位元素的目的就是对元素进行操作,例如写入文本,点击按钮,拖动等等的操作 (1)简单元素操作 简单元素操作 find_element_by_id("kw") ...

  9. python 自动化测试

    安装selenium 安装命令: pip install selenium 测试 打开一款Python编辑器,默认Python自带的IDLE也行.创建 baidu.py文件,输入以下内容: from ...

随机推荐

  1. AndroidTest工程的自定义gradle task

    由于需要将assets目录的资源拷贝到设备sdcard中,然而我的工程是一个android test工程,而android test工程在编译阶段,不会把assets目录的资源打包成对应apk,而为了 ...

  2. PHP语言开发微信公众平台(订阅号)之curl命令

    在开发过程中,经常会遇到要求用curl命令调用接口的情况 那么,什么是curl,简单来说curl是一个利用url语法规定来传输文件和哦数据的工具,支持很多协议,如 http.ftp.telent 等, ...

  3. 菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划

    菜鸟Scrum敏捷实践系列索引 菜鸟Scrum敏捷实践系列(一)用户故事概念 菜鸟Scrum敏捷实践系列(二)用户故事验收 菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划 采用Sc ...

  4. Java虚拟机工作原理

    Java虚拟机工作原理 首先我想从宏观上介绍一下Java虚拟机的工作原理.从最初的我们编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac ...

  5. FDG内存分配器笔记

    FDG: 大规模并行系统中的动态内存分配器由于需要全局同步(记账) ,导致性能急剧下降. 代码解析 1.superblock 类中包含两个变量,两个函数.默认superblock大小为2048 ite ...

  6. Python快速入门(4)

    输入输出: open() read() readine() readlines() write() pickle模块可以做序列化操作,持久保持对象的信息. 我们可以很容易的读写文件中的字符串.数值就要 ...

  7. javaEE与JSP基础

     JSP基础 1. jsp的作用:  * Servlet:    > 缺点:不适合设置html响应体,需要大量的response.getWriter().print("<html ...

  8. iOS中书写代码规范35条小建议

    1.精简代码, 返回最后一句的值,这个方法有一个优点,所有的变量都在代码块中,也就是只在代码块的区域中有效,这意味着可以减少对其他作用域的命名污染.但缺点是可读性比较差 NSURL *url = ({ ...

  9. Luogu1486郁闷的出纳员【Splay】

    P1486 郁闷的出纳员 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反 ...

  10. Spring整合Struts2,Hibernate的xml方式

    作为一个学习中的码农,一直学习才是我们的常态,所以最近学习了SSH(Spring,Struts2,Hibernate)整合,数据库用的MySQL. 写了一个简单的例子,用的工具是IntelliJ Id ...