Selenium是一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。Python则是强大的脚本语言,已广泛地应用于自动化测试中。
本文简单介绍一下Selenium和Python的使用。
1、Pyhton和Selenium的安装与环境搭建
(1)Python的安装
在官网下载:进入Python官方网站:https://www.python.org/downloads/ 下载并安装最新版本的Python(建议安装Python3) 。
python3.0以后的版本不需要下载setuptools和pip安装,已经在python中集成了pip,可以在cmd窗口中使用命令: pip -V 进行pip版本查询。通过pip就可以直接在命令行中安装自己想要的库。注意:下载的python一定要记住安装位置,最好是磁盘根目录创建一个名为python的目录专门存放python。
添加环境变量,也就是python所在的位置,如下图所示。首先:右键此电脑->点击属性->高级系统设置->环境变量->系统变量选择Path->新建->填写python的地址->确定,即可完成环境变量的添加。
在cmd中输入python判断python是否安装成功
(2)Selenium的安装
安装Selenium3.141.0可以使用命令直接下载并安装,但是也可以通过官网直接下载
并使用pythonsetup.pyinstall进行安装,这里一定要注意进入到安装selenium的安装目录才能使用此命令,随后在python中导入selenium,若没有报错,则证明安装selenium成功。
(3)浏览器驱动的下载
由于主流的浏览器有三个这里列举三种浏览器的下载地址和启用的实例,分别为谷歌浏览器,火狐浏览器和IE浏览器的驱动的下载和运行实例。
1、chromedriver 下载地址:http://chromedriver.storage.googleapis.com/index.html
启动谷歌浏览器
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')
2、Firefox的驱动geckodriver 下载地址:https://github.com/mozilla/geckodriver/releases/ (切记下对版本)
启动火狐浏览器
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.baidu.com/')
3、IE的驱动IEdriver 下载地址:http://www.nuget.org/packages/Selenium.WebDriver.IEDriver/
启动IE浏览器
from selenium import webdriver
browser = webdriver.Ie()
browser.get('http://www.baidu.com/')
2、测试脚本的编写
安装好所需的全部环境就可以进行脚本的编写了。首先selenium是通过获取网页的元素然后对网页进行控制,首先我们要帮助它找到网页的元素:
Selenium 给我们提供了几种的定位元素方法:
(1) find_element_by_id()
我们可以直接通过英文意思理解这个方法,通过 ID 查找元素,也就是使用页面里的 id 属性:id = “”。
(2)find_element_by_name()
通过查找名字的方式,对元素进行定位。
(3)find_elements_by_class_name()
通过查找class_name的方式,对元素进行定位。
(4)find_element_by_tag_name()
通过查找tag_name的方式,对元素进行定位。
(5)find_element_by_link_text()
通过查找页面的文本信息进行定位。
(6)find_element_by_partial_link_text()
通过模糊文本信息查找元素,有些时候,我们希望定位到一个文本比较长的元素时,我们就可以通过这个方法去定位。
(7)find_element_by_xpath()
xpath 元素定位:通过查找元素的路径去查找元素,由于获取的方式简单,所以这种方法是最常用的方法。
3、测试实例列举
(1)循环点击200次呼叫拨号、创建会议、会议室、通讯录、最近呼叫和系统状态。
from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver import ActionChainsfrom selenium.webdriver.common.action_chains import ActionChainsfrom time import sleepbrowser = webdriver.Chrome()browser.get('http://172.16.235.13/')print(browser.current_url)sleep(2)browser.find_element_by_id("loginAccount").send_keys("admin")sleep(2)browser.find_element_by_id("lpassword").send_keys("admin123")browser.find_element_by_id("loginSubmit").click()sleep(2)i = 0while i<200:browser.find_element_by_link_text("拨号呼叫").click() sleep(2) browser.find_element_by_link_text("创建会议").click() sleep(2) browser.find_element_by_link_text("会议室").click() sleep(2) browser.find_element_by_link_text("通讯录").click() sleep(2) browser.find_element_by_link_text("最近呼叫").click() sleep(2) browser.find_element_by_link_text("系统状态").click() sleep(2) i+=1
(2)点对点呼叫挂断,循环十次,呼叫之后截图保存在路径C:/Users/zhd/Desktop/JMeter/test/%s.png并命名为当前系统时间。
from selenium import webdriverfrom time import sleepbrowser = webdriver.Chrome()browser.get('http://172.16.235.13/')#输入本终端的IP地址print(browser.current_url)#输出到控制台当前测试终端的IP地址sleep(2)#增加延时2sbrowser.find_element_by_id("loginAccount").send_keys("admin")#输入用户名sleep(2)browser.find_element_by_id("lpassword").send_keys("admin123")#输入密码browser.find_element_by_id("loginSubmit").click()#点击登录sleep(5)
i = 0while i<200:#循环200次browser.switch_to.frame("contentFrame")#选择主框架 browser.find_element_by_id("callinfoInputId").send_keys("172.16.235.24")#输入呼叫的IP地址 sleep(2) browser.find_element_by_id("callid").click()#点击呼叫 sleep(30)
browser.get_screenshot_as_file("C:/Users/zhd/Desktop/JMeter/test/%s.png" % datetime.datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])#截图并保存到指定目录browser.switch_to.frame("contentFrame") browser.find_element_by_id("endconf").click()#点击结束会议 sleep(2)
browser.get_screenshot_as_file("C:/Users/zhd/Desktop/JMeter/test/%s.png" % datetime.datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])#截图并保存到制定目录
browser.switch_to.parent_frame()#返回父级目录browser.find_element_by_xpath('//*[@id="alertid"]/div[1]/table/tbody/tr[2]/td[2]/div[2]/div[2]/div/div[1]/div[2]').click()#点击确定
browser.get_screenshot_as_file("C:/Users/zhd/Desktop/JMeter/test/%s.png" % datetime.datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])#截图并保存在制定的目录
(3)循环创建多点会议并退出会议
from selenium import webdriver
from time import sleep
import datetime
browser = webdriver.Chrome(r'C:\Users\tiancizhao\Desktop\JMeter\chromedriver_win32\chromedriver.exe')
browser.get('http://192.168.55.56/')#输入本终端的IP地址
sleep(2)#增加延时2s
browser.find_element_by_id("loginAccount").send_keys("admin")#输入用户名
sleep(2)
browser.find_element_by_id("lpassword").send_keys("111111qq")#输入密码
browser.find_element_by_id("loginSubmit").click()#点击登录
try:
browser.find_element_by_xpath(
'//*[@id="alertid"]/div[1]/table/tbody/tr[2]/td[2]/div[2]/div[2]/div/div[1]/div[2]').click()
except:
pass
sleep(5)
while True:
browser.find_element_by_link_text("创建会议").click() #切换到创会的界面
browser.switch_to.frame("contentFrame")#切换到内容框架
browser.find_element_by_id("CreatConfBtn").click()#点击创建多点会议
sleep(300) #等待300s
browser.get_screenshot_as_file("C:/Users/zhd/Desktop/test/%s/Desktop/test/%s.png" % datetime.datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])#截图并保存在制定的目录
sleep(3)
browser.switch_to.frame("contentFrame")#切换到内容框架
browser.find_element_by_id("leaveconf").click()#点击退出会议
sleep(3)
browser.switch_to.parent_frame()
browser.get_screenshot_as_file("C:/Users/zhd/Desktop/test/%s/Desktop/test/%s.png" % datetime.datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])#截图并保存在制定的目录
sleep(3)
browser.find_element_by_xpath('/html/body/div[3]/div[1]/table/tbody/tr[2]/td[2]/div[2]/div[2]/div/div[1]/div[2]').click()#点击确定结束会议
sleep(5)
4、总结
在操作的过程中注意以下几点:
1、查找网页元素的时候,注意网页中使用frame的情况,首先要使用browser.switch_to.frame("contentFrame")命令进入frame中,才能选中所需的元素。使用之后要记得返回上一级frame,browser.switch_to.parent_frame()。Webmtc主要使用id选择和xpath获取元素,webmtc网页中class使用的比较少。
2、还要注意页面刷新之后代码也会找不到frame,比如呼叫建立之后页面会刷新,多点会议创建之后页面会刷新,点击设置界面和呼叫界面页面也会刷新。