元素的定位方法可能会被多处代码调用,而在UI自动化测试过程中会涉及多个页面,每个页面在进行元素定位时又需要用到元素定位方法,所以对元素定位方法进行重构再封装是有必要的,也是有价值的。
优化的目的主要有两点:
一是可以减少代码量并且有效提高代码复用率;
二是可以提高代码的可读性。
代码重构可以通过定义函数来实现。毕竟函数一个很重要的作用就是提高代码的重用性。
示例:以python+selenium实现12306模拟火车票的查询及预订为例,对元素定位方法进行优化
python+selenium实现12306模拟火车票的查询及预订
比如:根据元素id属性值来来返回元素定位语句。其中’id’为函数名,‘element’为函数参数。在函数体中返回函数定义语句,其中id属性值为函数传入的参数’element’。
def id(element):
return driver.find_element_by_id(element)
代码重构后,测试脚本代码如下。其中有一点需要注意的是,如果将定义函数的代码和测试代码放在同一个python文件中,需要将函数定义的部分放到测试代码的前面。
# coding = utf-8
from datetime import date, timedelta
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
# 以下为定义函数部分,其目的是返回今天后的第n天后的日期,格式为“2022-03-28”
def date_n(n):
return str((date.today() + timedelta(days=int(n))).strftime('%Y-%m-%d'))
def id(element):
'''
根据元素id属性值来返回元素定位语句。
:param element: id属性值
:return:
'''
return driver.find_element(By.ID, element)
def xpath(element):
'''
使用xpath定位元素
:param element:
:return:
'''
return driver.find_element(By.XPATH, element)
# 以下变量用于定义出发城市和到达城市
from_station, to_station = '成都', '重庆'
# 以下变量为tomorrow变量
tomorrow = date_n(1)
# 打开chrome浏览器
driver = webdriver.Chrome()
# 设置浏览器最大化
driver.maximize_window()
# 打开12306首页
driver.get('https://www.12306.cn/index/')
# 定位出发城市和到达城市的页面元素
# 输入出发城市
xpath('//input[@id="fromStationText"]').click()
xpath('//input[@id="fromStationText"]').send_keys(from_station)
xpath('//div[@id="citem_2"]').click()
# 输入到达城市
xpath('//input[@id="toStationText"]').click()
xpath('//input[@id="toStationText"]').send_keys(to_station)
xpath('//div[@id="citem_1"]').click()
# 输入出发时间
id('train_date').clear()
id('train_date').send_keys(tomorrow)
# 点击查询
id('search_one').click()
sleep(2)
# 切换到新窗口
driver.switch_to.window(driver.window_handles[1])
# 点击D2244车次的预订
xpath('//tr[starts-with(@id,"ticket_76000D22440N_01_06")]/td/a').click()
sleep(2)
'''账号登录'''
# 输入用户名
id('J-userName').send_keys('qaws12342')
# 输入密码
id('J-password').send_keys('qwedsa123')
# 关闭浏览器
driver.quit()