UI自动化测试中的页面定位问题

这几天有人问我,UI自动化测试中使用到的页面定位元素应该存放在哪里比较合适?

我想说的是,如果你使用的是PO设计模式设计测试用例的话,可以把定位元素存在每一个page页面或者单独存放在一个目录中,新键不同页面对应不同名称的文件来存储定位方式。

当页面变动的时只需修改对应页面对应的定位表达式文件即可,方便项目维护。

还有一种就是存放在配置文件下,这样对于不懂得自动化测试的人员也可以配置,当然你可以根据自己的意愿进行选择。

那么下面我看就来看一下如何存放到配置文件中,如何来读取并定位?

目录结构

测试地址: www.sogou.com

测试步骤:

1.打开网址;

2.搜索框输入python;

3.点击搜索按钮;

4.判断python是否包含在页面源码中。

文件说明:

  • WebElement.ini 存放定位元素
  • GetElement.py用来读取配置文件并查找页面元素
  • SouGouTc.py用来编写测试用

实例代码

WebElement.ini:

[sogou]
queryBox=id:query
queryBtn=id:stb

 

(左右滑动查看完整代码)

GetElement.py:

from selenium.webdriver.support.ui import WebDriverWait
import configparser
import os
from selenium import webdriver
class getElement():
    '''
    从配置文件中来获取定位信息
    '''
    def __init__(self):
        self.elementIni = os.path.dirname(os.path.abspath(__file__))\
                          +r'\WebElement.ini' # 配置文件所在目录
    def getElement(self, driver, sogouSection, sogouOption):
        try:
             f = configparser.ConfigParser()
            f.read(self.elementIni) # 读配置文件内容到内存中
            locators = f.get(sogouSection, sogouOption).split(':')
            # 获取定位方式
            locaMethod = locators[0]
           # 获取定位表达式
            locaExpression = locators[1]
            # 通过显示等待的方式获取页面的元素
            element = WebDriverWait(driver,5).until(lambda x : x.find_element(locaMethod, locaExpression))
        except Exception as e:
            raise e
        else:
            return element


if __name__ == '__main__':
    ele = getElement()
    print(ele.elementIni)
    driver = webdriver.Firefox()
    driver.get('http://www.sogou.com')
    element = ele.getElement(driver, 'sougou', 'queryBox')
    element.send_keys('python')

SouGouTc.py:

from selenium import webdriver
import unittest
import time
from programDataSeparate.GetElement import getElement
class sogouTc(unittest.TestCase):
    def setUp(self):
        self.obj = getElement()
        self.driver = webdriver.Firefox()
        self.driver.get('http://www.sogou.com')
    def testSoGou(self):
        elementQuery = self.obj.getElement(self.driver, 'sogou', 'queryBox') # 搜索框
        elementQuery.send_keys('python')
        elementBtn = self.obj.getElement(self.driver, 'sogou', 'queryBtn') # 搜索按钮
        elementBtn.click()
        time.sleep(2)
        self.assertTrue('python' in self.driver.page_source) # 断言
    def tearDown(self):
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()

总结

本实例实现了程序与数据的分离,首先从UI对象库文件WebElement.ini中取得sogou首页中需要操作的页面元素的定位方式和定位表达式。

然后在GetElement.py中取得该页面元素的实例对象,最后返回给测试用例方法中进行后续处理。

这样做的好处是即使不懂得测试的人员也可以配置用例,当定位表达式改变时,只修改配置文件中的定位即可,无需修改测试相关代码,当然这也是相对来说的,如果页面功能操作步骤变了那么你就得修改代码操作步骤了。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

8小时传疯!大厂面试真题全被大佬整理在这个小程序上了!【软件测试,建议收藏】

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础 

  全套资料获取方式:点击下方小卡片自行领取即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值