Python+Selenium.webdriver实现WEB端UI自动化测试

Posted kuaiquxie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python+Selenium.webdriver实现WEB端UI自动化测试相关的知识,希望对你有一定的参考价值。

本篇记录基于Python+Selenium.webdriver实现WEB端UI自动化测试,其中测试用例使用excel维护。

 

1.项目选取(登录页无验证码校验的项目)

该示例选取的是登录页不需要输入验证码校验的基础页面(考虑到现在大部分项目都是需要进行验证码校验的,后面研究后再出一篇相关的分享。)

 

2.环境搭建

2.1安装Python

官网目前已经更新到python3.9.7,大家可以到官网下载并安装

2.2安装Selenium

命令:pip install selenium

或使用pycharm安装

2.3安装浏览器驱动

1.以Google Chrome浏览器为例,打开浏览器--帮助--关于Google Chrome,查看浏览器版本。

2.访问http://chromedriver.storage.googleapis.com/index.html,下载浏览器对应版本号的驱动软件。

3.驱动文件放到python的安装目录下(和python.exe相同目录)。

 

3.项目示例

3.1测试数据

包括编号、用例描述、元素定位方法及对应数据,定位到元素后的操作方法及数据。

 

3.2 通用脚本代码(可复用)

示例脚本:Selenium_UI_Test.py

from selenium import webdriver
from selenium.webdriver.support.select import Select

class Selenium_UI_Test01(object):
   """
  1.8种元素定位方法
  2.quit()-退出,关闭所有标签页;
  3.refresh()-浏览器刷新
  """
   def selemium_find_element(self,driver,method,data):
       if method == "find_element_by_id":
           return driver.find_element_by_id(data)
       elif method == "find_element_by_name":
           return driver.find_element_by_name(data)
       elif method == "find_element_by_class_name":
           return driver.find_element_by_class_name(data)
       elif method == "find_element_by_tag_name":
           return driver.find_element_by_tag_name(data)
       elif method =="find_element_by_link_text":
           return driver.find_element_by_link_text(data)
       elif method == "find_element_by_partial_link_text":
           return driver.find_element_by_partial_link_text(data)
       elif method == "find_element_by_xpath":
           return driver.find_element_by_xpath(data)
       elif method == "":
           return driver.find_element_by_css_selector(data)
       elif method ==\'refresh\':
           return driver.refresh()
       elif method ==\'quit\':
           return driver.quit()
       else:

           print("请检查元素定位方法是否正确!")

           #定位到元素后可执行的操作
           #1.点击和输入:clear()-清空输入框、click()-点击、send_keys()-发送关键字
           def operator_element(self,element,method,data):
               if "click" in method:
                   element.click()
                   elif "send_keys" in method:
                       element.send_keys(data)
                       elif "clear" in method:
                           element.clear()
                           elif \'select\' in method:
                               Select(element).select_by_index(data)
                               else:
                                   print("请检查操作方法是否正确!")

 

3.3测试用例脚本 示例脚本:

Selenium_UI_Test_gsc.py 读取excel中的测试用例,调用通用脚本中定义的方法,执行测试用例。

from openpyxl import load_workbook
from selenium import webdriver
import common.Selenium_UI_Test as SUT
sut = SUT.Selenium_UI_Test01()
import time
t = time.strftime("%Y%m%d%H%M")

driver = webdriver.Chrome()
driver.get("https://www.52shici.com/")
wb = load_workbook("..\\\\datas\\我爱古诗词UI测试.xlsx")
ws = wb.worksheets[0]
for row in ws.iter_rows(min_row=2,max_row=ws.max_row):#跳过首行表头信息
   method1= row[2].value
   data1 = row[3].value
   method2 = row[4].value
   data2 = row[5].value
   element = sut.selemium_find_element(driver,method1,data1)
   result=sut.operator_element(element,method2,data2)

   row[6].value="pass"

   wb.save(f"..\\\\Reports\\我爱古诗词UI测试_t.xlsx")

 

3.4执行结果 自动打开浏览器,跳转到登录页面并完成登录,自动输入页面信息并提交。

自动生成excel测试结果

 

 

原文链接:https://blog.csdn.net/laofashi2015/article/details/120435538

selenium + webdriver(python)

本节知识点:

  • 打印URL
  • 将浏览器最大化
  • 设置浏览器固定宽、高
  • 操控浏览器前进、后退

 

 

打印URL

 

上一节讲到,可以将浏览器的title打印出来,这里再讲个简单的,把当前URL打印出来。其实也没啥大用,可以做个凑数的用例。

 

技术分享图片
#coding=utf-8

from selenium import webdriver
from time import sleep

browser = webdriver.Chrome("C:\python35\Python35\selenium\webdriver\chromedriver.exe")
url= http://www.baidu.com#通过get方法获取当前URL打印 print ("now access %s" %url) browser.get(url) sleep(2)
browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click() sleep(3)
browser.quit()
技术分享图片

 

其实,我们可以把这用户登录成功后的URL打印,用于验证用户登录成功。

又或者,我们打印其它信息,比如,一般的登录成功页会出现“欢迎+用户名”,可以将这个信息打印表明用户登录成功。

 

 

将浏览器最大化

 

我们知道调用启动的浏览器不是全屏的,这样不会影响脚本的执行,但是有时候会影响我们“观看”脚本的执行。

技术分享图片
#coding=utf-8

from selenium import webdriver
from time import sleep

browser = webdriver.Chrome("C:\python35\Python35\selenium\webdriver\chromedriver.exe")

browser.get("http://www.baidu.com")
sleep(2)

print( "浏览器最大化")
browser.maximize_window()  #将浏览器最大化显示
sleep(2)

browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()
技术分享图片

 

 

设置浏览器固定宽、高

 

最大化还是不够灵活,能不能随意的设置浏览的宽、高显示?当然是可以的。

技术分享图片
#coding=utf-8
from selenium import webdriver
from time import sleep

browser = webdriver.Chrome("C:\python35\Python35\selenium\webdriver\chromedriver.exe")

browser.get("http://m.mail.10086.cn")
sleep(2)

print ("设置浏览器宽480、高800显示")
browser.set_window_size(480, 800)  #参数数字为像素点
time.sleep(3)
browser.quit()
技术分享图片

这个需求也还是有的,比如我们通过PC浏览器在访问一下手机网站时,调整浏览器为手机屏幕的宽、高,容易发现一些显示问题。(上面的手机邮箱网站就是笔者测试过的一个产品)

 

 

操控浏览器前进、后退

 

浏览器上有一个后退、前进按钮,对于浏览网页的人是比较方便的;对于做web自动化测试的同学来说应该算是一个比较难模拟的问题;其实很简单,下面看看python的实现方式

技术分享图片
#coding=utf-8

from selenium import webdriver
from time import sleep

browser = webdriver.Chrome("C:\python35\Python35\selenium\webdriver\chromedriver.exe")
#访问百度首页 first_url= http://www.baidu.comprint ("now access %s" %(first_url)) browser.get(first_url) sleep(2) #访问新闻页面 second_url=http://news.baidu.comprint( "now access %s" %(second_url)) browser.get(second_url) sleep(2) #返回(后退)到百度首页 print ("back to %s "%(first_url)) browser.back() sleep(1) #前进到新闻页 print ("forward to %s"%(second_url)) browser.forward() sleep(2) browser.quit()
技术分享图片

为了使过程让你看得更清晰,在每一步操作上都加了print sleep 

说实话,这两个功能平时不太常用,所能想到的场景就是几个页面来回跳转,但又不想用get url的情况下。
















以上是关于Python+Selenium.webdriver实现WEB端UI自动化测试的主要内容,如果未能解决你的问题,请参考以下文章

Selenium WebDriver(Python)API

[python] python+selenium+webdriver

[python] python+selenium+webdriver

selenium webdriver (python)大全

python+selenium—webdriver入门

python+selenium—webdriver入门