川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

API:操作API(四)

作者:川石学院 日期:2022-04-27 10:57:11 点击数:

一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“API:操作API(四)”。

UiAutomator API详解:UiSelector类介绍(一)(图1)

  (16)执行Javascript代码&对HTML5 canvas的操作。

  Selenium可以用过execute_script(Java_Script)方法执行Javascript代码,语句则为参数Java_Script。canvas也是HTML5的一个亮点,Selenium对canvas操作其实就是执行一段javascript语句。

  案例4-71:HTML5 canvas的操作。

  简单起见,在这里使用w3school的画布进行操作,代码如下。

  def test_CheckCanvas (self):

  self.driver.execute_script("var c=document.getElementById('myCanvas');"

  "var cxt=c.getContext('2d');"

  "cxt.fillStyle='#FF0000';"

  "cxt.fillRect(0,0,150,50);")

  time.sleep(3)

  self.driver.save_screenshot("./HTMLCanvas.png")

  运行这段代码产生的截图如图4-34所示。

API:操作API(四)(图2)

图4-34 HTML5 canvas的操作后的截图

  (17)Selenium Grid。

  如果测试用例非常多的时候,往往在一台机器上运行会消耗很多时间,Selenium提供的Grid技术,如图4-35所示。

API:操作API(四)(图3)

图4-35 HTML5 Selenium Grid

  Selenium Grid是一个HUB-NODE接口,需要测试的代码都在HUB节点上,通过HUB的管理,所有Selenium测试程序被随机分配到Node节点上进行运行。

  为了能够运行Selenium Grid,需要作如下的配置。

  l hub端与node端都能下载selenium-server-standalone-3.9.1.jar放在本地目录中,比如C:\Lib\下。

  l 下载selenium-3.X driver。

  l 在hub端启动hub节点(注意hub的4444端口必须是空闲的)。

  C:\>java -jar path\selenium-server-standalone-3.9.1.jar -role hub

  其中path为存放selenium-server-standalone-3.9.1.jar的目录,下同。

  l 在node端向hub端进行注册(注意node的5566端口是空闲的,否则重新在命令中分配)。

  C:\>java -jar path\selenium-server-standalone-3.9.1.jar -role node -port 5566 -hub http://:4444/grid/register

  其中是Hub端的IP地址。

  l 在Hub端打开浏览器,地址栏中输入:http://localhost:4444/grid/console,出现如图4-36界面。

API:操作API(四)(图4)

图4-36 注册了Node的Hub浏览器界面

  由图4-36可以看见,默认情况下Node端注册了5个Firefox浏览器、1个IE浏览器和5个Chrome浏览器。也可以通过以下命令注册你想要的浏览器个数。

  注册5个IE浏览器

  C:\>java -jar path\selenium-server-standalone-3.9.1.jar -role node -hub http:// :4444/grid/register -port 5566 -maxSession 5 -browser browserName="internet explorer",maxInstances=5

  注册5个chrom浏览器

  C:\>java -jar path\selenium-server-standalone-3.9.1.jar -role node -hub http:// :4444/grid/register -port 5566 -maxSession 5 -browser browserName="chrome",maxInstances=5

  注册5个fixfox浏览器

  C:\>java -jar path\selenium-server-standalone-3.4.0.jar -role node -hub http:// :4444/grid/register -port 5566 -maxSession 5 -browser browserName="fixfox",maxInstances=5

  如果IE浏览器、chrom浏览器和fixfox浏览器的驱动分别在C:\Lib_ie\、C:\Lib_chrome\和C:\Lib_firefox\目录下,可以用如下命令进行注册。

  C:\>java -Dwebdriver.ie.driver="C:\Lib_ie\IEDriverServer.exe" -Dwebdriver.chrome.driver="C:\Lib_chrome \chromedriver.exe" -Dwebdriver.firefox.driver="C:\Lib_firefox\geckodriver.exe" -jar path \selenium-server-standalone-3.9.1.jar -role node -hub http://:4444/grid/register -port 5566

  另外在Node上要进行如图4-37设置,点亮“允许活动内容在‘我的电脑’上运行”选项。

API:操作API(四)(图5)

图4-37 Selenium Grid Node上Internet设置

  案例4-72:Selenium Grid。

  import time

  from selenium import webdriver

  from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

  import unittest,time

  class grid(unittest.TestCase):

  def setUp(self):

  #CHROME浏览器

  capabilities = DesiredCapabilities.CHROME

  #微软浏览器

  #capabilities = DesiredCapabilities.INTERNETEXPLORER

  #FIREFOX浏览器

  #capabilities = DesiredCapabilities.FIREFOX

  self.driver = webdriver.Remote(command_executor="http://10.10.7.238:4444/wd/hub",desired_capabilities=capabilities)# 10.10.7.238为本地Hub端的IP地址

  """

  如果grid的hub可以接收到消息,但是测试不成功,则可以使用本地方法来调试。

  如driver = webdriver.Ie()来进行本地测试,"""

  #self.driver = webdriver.Ie()

  self.driver.implicitly_wait(3)

  self.driver.get("https://www.baidu.com")

  def test_grid(self):

  self.driver.find_element_by_id("kw").send_keys("大数据")

  self.driver.find_element_by_id("su").click()

  time.sleep(5)

  self.assertEqual(self.driver.title,"大数据_百度搜索",msg="Title is not right")

  def tearDown(self):

  self.driver.quit()

  其中。

  l capabilities = DesiredCapabilities.CHROME:表示在CHROME浏览器中运行。

  l capabilities = DesiredCapabilities.INTERNETEXPLORER:表示在微软浏览器中运行。

  l capabilities = DesiredCapabilities.FIREFOX:表示在FIREFOX浏览器中运行。

  Selenium Grid测试程序在Hub端启动,将会被随机平均分配到各个Node端运行。

  (18)数据化驱动。

  通过Python读取xml、excel文件、数据库可以对Selenium进行数据驱动操作。

  案例4-73:XML文件的数据驱动。

  定义以下config.xml文件,文件中定义了所用浏览器类型,一组定义了百度查询关键字数据。

  •   chrome

  •   软件测试

  •   大数据

  •   软件工程

  •   云计算

  其测试代码如下。

  from selenium import webdriver

  import unittest,time

  from xml.dom import minidom

  from util import drivers,findby

  class checkbaidu(unittest.TestCase):

  def setUp(self):

  d = drivers()

  self.driver=d.driver

  self.driver.implicitly_wait(5)

  def test_CheckBaidu(self):

  dom = minidom.parse('config.xml')

  root = dom.documentElement

  words = root.getElementsByTagName('words')

  i=0

  for word in words:

  self.driver.get("https://www.baidu.com")

  inputstring=words[i].firstChild.data

  self.driver.clear(self.driver.find_element_by_id("kw"))

  self.driver.send_keys(self.fd.find_element_by_id("kw"),inputstring)

  self.driver.click(self.driver.find_element_by_id("su"))

  time.sleep(3)

  self.assertEqual(self.driver.title,inputstring+"_百度搜索",msg="标题错误")

  i=i+1

  def tearDown(self):

  self.fd.quit(self.driver)

  if __name__=="__main__":

  unittest.main()

  案例4-74:Excel文件的数据驱动。

  建立Excel文件:config.xlsx。在这个文件中第一个sheet中书写测试所用的浏览器类型(为方便起见,从第一行第一列开始书写),如图4-38所示。第二个sheet中为测试数据,定义了百度查询关键字数据,如图4-39所示。

API:操作API(四)(图6)

图4-38第一sheet中定义测试所用的浏览器类型

API:操作API(四)(图7)

图4-39 第二个sheet中为测试数据

  测试代码如下。

  #coding=utf8

  # 导入xlrd模块

  import xlrd

  from xlutils.copy import copy

  import unittest

  from selenium import webdriver

  import unittest,time

  from xml.dom import minidom

  from util import drivers,findby

  class checkbug2report(unittest.TestCase):

  def setUp(self):

  #设置文件名和路径

  fname = 'config.xlsx'

  # 打开文件

  filename = xlrd.open_workbook(fname)

  #获取当前文档的表(得到的是sheet的个数,一个整数)

  self.sheets=filename.nsheets

  self.sheet1 = filename.sheets()[0]#获得sheet1

  self.sheet2 = filename.sheets()[1]#获得sheet2

  # print sheet

  self.nrows1 = self.sheet1.nrows#获得sheet1的行数

  self.nrows2 = self.sheet2.nrows#获得sheet2的行数

  d = drivers()

  self.driver=d.driver

  self.driver.implicitly_wait(5)

  def test_baidu(self):

  for i in range(0,self.nrows1):#读取sheet1中的数据

  row_datas = self.sheet1.row_values(i)

  browser = row_datas[0]

  for i in range(0,self.nrows2): #循环读取sheet2中的数据

  row_datas = self.sheet2.row_values(i)

  inputstring = row_datas[0]

  self.driver.get("https://www.baidu.com")

  self.driver.clear(self.driver.find_element_by_id("kw"))

  self.driver.send_keys(self.driver.find_element_by_id("kw"),inputstring)

  self.driver.click(self.driver.find_element_by_id("su"))

  time.sleep(3)

  self.assertEqual(title,inputstring+"_百度搜索",msg="标题错误")

  def tearDown(self):

  self.driver.quit()

  if __name__=="__main__":

  unittest.main()

  断言API

  由于这里采用的是unittest,所以直接使用unittest的断言函数。读者可以考虑如何采用Pytest框架来实现。


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2022-04-27 10:57:11
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2022-04-27 10:57:11
  • 国外的月亮也不一定比国内测试猿的年薪美~2022-04-27 10:57:11
  • 建筑工程专业朱同学成功转行为软件测试人!2022-04-27 10:57:11
  • 财务管理专业转行软件测试月薪甩会计几条街!2022-04-27 10:57:11
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2022-04-27 10:57:11
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2022-04-27 10:57:11
  • 文科生转行软件测试照样拿下高薪15K!2022-04-27 10:57:11
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2022-04-27 10:57:11
  • 毕业1年,迷茫的他最终选择转行软件测试2022-04-27 10:57:11