JavaScript实战+数据驱动

JavaScript实战

在UI的自动化测试中,我们也是需要使用JS来处理一些特殊的交互,比如针对浏览器的滑动操作,以及针对富文本的特殊处理,和针对只读属性的时间控件的处理。下面通过实际的案例来演示这部分的具体应用和案例实战。

浏览器的滑动

浏览器的滑动主要分为浏览器的向上和向下,比如我们就以百度搜索引擎为案例,我们进行关键字的搜索后,想点几下一步的操作,但是下一步无法展示出来,就需要把页面滑动到底部才可以展示出来。下面通过实际的案例来演示下这部分的具体应用,案例代码如下:

import time
from selenium import  webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://wwww.baidu.com/')
driver.implicitly_wait(30)
driver.find_element(By.ID,'kw').send_keys('网易云课堂 接口测试')
driver.find_element(By.ID,'su').click()
time.sleep(2)
#到浏览器底部
js='var q=document.documentElement.scrollTop=10000'
#调用JS语言
driver.execute_script(js)
time.sleep(3)
#到浏览器的顶部
js1='var q=document.documentElement.scrollTop=0'
driver.execute_script(js1)
time.sleep(3)
driver.close()

富文本的处理

 

 下面我们使用JS的方式来进行处理,实现在富文本里面输入我们需要的内容,具体涉及到的代码

def richText(driver,content):
   '''
   实现在富文本里面输入内容
   :param driver: webdriver实例化后的对象信息
   :param content: 富文本里面需要输入的文字内容
   :return:
   '''
   js="document.getElementById('ueditor_0').contentWindow.document.body.innerHTML='{0}'".format(content)
   driver.execute_script(js)

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://uutool.cn/ueditor/')
driver.implicitly_wait(30)
time.sleep(5)
richText(driver=driver,content='自动化测试实战')
time.sleep(3)
driver.close()

时间控件

下面具体来看时间控件的处理,时间控件很多时候是只读属性,具体见如下的HTML的代码:

 

 

在如上的代码中可以很清晰的看到它是只读属性,那么我们需要填写时间的属性,具体解决问题的步骤为:

  • 取消时间控件的只读属性

  • 取消只读属性后,操作input控件的value,其实我们知道input里面输入的内容最终是在value的属性里面。

下面通过具体的代码来实现这部分,实现在时间控件中填写我们想选择的时间,具体实现的代码为:

import time
from selenium import  webdriver

def startTime(driver,content):
   '''开始时间控件'''
   js="$(\"input[placeholder='开始时间≥当前时间']\").removeAttr('readonly');" \
      "$(\"input[placeholder='开始时间≥当前时间']\").attr('value','{0}')".format(content)
   driver.execute_script(js)

def endTime(driver,content):
   '''结束时间控件'''
   js="$(\"input[placeholder='结束时间>开始时间']\").removeAttr('readonly');" \
      "$(\"input[placeholder='结束时间>开始时间']\").attr('value','{0}')".format(content)
   driver.execute_script(js)

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///D:/test/%E4%BB%A3%E7%A0%81/Time/Time/index.html')
time.sleep(2)
startTime(driver=driver,content='2022-01-01 00:00:00')
time.sleep(2)
endTime(driver=driver,content='2022-09-16 23:59:59')
time.sleep(2)
driver.close()

数据驱动

在UI的自动化测试中,我们需要把测试使用到的数据分离到文件中,如果单纯的写在我们的测试模块里面,不是一个好的设计,所以不管是什么类型的自动化测试,都是需要把数据分离出来的。当然分离到具体的文件里面,文件的形式其实有很多的,这里主要说明JSON的文件和YAML的文件在UI自动化测试中的应用。

数据驱动:在自动化测试,把测试中的数据分离到文件中;
这样的一个过程叫数据驱动
JSON:json
CSV:csv
EXCEL:xlrd pip install slrd
YAML:pyyaml pip install pyyaml
mysql:pymqsql pip install pymysql

JSON文件

JSON库主要应用于序列化以及反序列化中,特别是在API的自动化测试中,序列化以及反序列化是知识体系里面必须需要掌握的技术栈的体系。当然我们也是可以针对文件进行序列话和反序列化的处理,针对文件的序列化可以简单的理解为就是把第三方的数据写到文件里面,使用JSON库里面的方法是dump(),那么针对文件的反对序列化可以理解为是从文件中读取数据,那么使用到的JSON库里面的load()的方法,下面主要是针对UI自动化测试的数据进行分离

我们可以把测试的数据分离到JSON文件中,分离的数据具体为:

import json
import time
from selenium import  webdriver
from selenium.webdriver.common.by import By

def readJson():
    return  json.load(open('sina.json','r',encoding='utf-8'))

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://mail.sina.com.cn/')
driver.implicitly_wait(30)
driver.find_element(By.CLASS_NAME,'loginBtn').click()
time.sleep(2)
divText=driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')

#python原生断言 assert
assert divText.text==readJson()['emailNull']
driver.close()

YAML文件

下面我们演示把测试数据存储到YAML文件里面,分离出来的文件内容为:

 

 

import yaml
import time
from selenium import  webdriver
from selenium.webdriver.common.by import By

def readYaml():
    with open('sina.yaml','r',encoding='utf-8') as f:
        return  yaml.safe_load(f)

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://mail.sina.com.cn/')
driver.implicitly_wait(30)
driver.find_element(By.CLASS_NAME,'loginBtn').click()
time.sleep(2)
divText=driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
#python原生断言 assert
assert divText.text==readYaml()['sina']['emailNull']
time.sleep(5)
driver.refresh()
driver.find_element(By.ID,'freename').send_keys('fdhdfgfd')
time.sleep(3)
driver.find_element(By.CLASS_NAME,'loginBtn').click()
time.sleep(2)
divText=driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
#python原生断言 assert
assert divText.text==readYaml()['sina']['emailFormat']
time.sleep(5)
driver.close()

 

posted on 2022-09-16 18:39  xiaobia1  阅读(127)  评论(0)    收藏  举报