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

发表于:2022-6-29 09:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:软件测试小P    来源:网络

  这几天有人问我,UI自动化测试中使用到的页面定位元素应该存放在哪里比较合适?
  我想说的是,如果你使用的是PO设计模式设计测试用例的话,可以把定位元素存在每一个page页面或者单独存放在一个目录中,新键不同页面对应不同名称的文件来存储定位方式。
  当页面变动的时只需修改对应页面对应的定位表达式文件即可,方便项目维护。
  还有一种就是存放在配置文件下,这样对于不懂得自动化测试的人员也可以配置,当然你可以根据自己的意愿进行选择。
  那么下面我看就来看一下如何存放到配置文件中,如何来读取并定位?
  目录结构
  测试地址:http://www.sogou.com
  测试步骤:
  1.打开网址;
  2.搜索框输入python;
  3.点击搜索按钮;
  4.判断python是否包含在页面源码中。
  文件说明:
  WebElement.ini 存放定位元素。
  GetElement.py用来读取配置文件并查找页面元素。
  SouGouTc.py用来编写测试用。
  实例代码
  WebElement.ini:
  [sogou]queryBox=id:queryqueryBtn=id:stb
  GetElement.py:
  from selenium.webdriver.support.ui 
  import WebDriverWaitimport configparserimport osfrom selenium 
  import webdriverclass 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 elementif __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 webdriverimport unittest
  import timefrom programDataSeparate.GetElement 
  import getElementclass 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中取得该页面元素的实例对象,最后返回给测试用例方法中进行后续处理。
  这样做的好处是即使不懂得测试的人员也可以配置用例,当定位表达式改变时,只修改配置文件中的定位即可,无需修改测试相关代码,当然这也是相对来说的,如果页面功能操作步骤变了那么你就得修改代码操作步骤了。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号