对selenium中元素定位方法进行重构再封装

元素的定位方法可能会被多处代码调用,而在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()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值