python自动化测试应用-第5篇(WEB测试)--Selenium环境篇

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个了。下面我们先来分析一下我们定位到的页面“登录“元素的源码,我们可以得到哪些信息呢?

登录

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

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

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

2在标签里可以知道包含的属性有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"]是通过一个父层级来定位,对照源码可以清楚的看到登录所在的标签的上一层级

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容