篇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个了。下面我们先来分析一下我们定位到的页面“登录“元素的源码,我们可以得到哪些信息呢?
登录
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"]是通过一个父层级来定位,对照源码可以清楚的看到登录所在的标签的上一层级