使用Selenium进行表格和导航菜单的测试

发表于:2022-1-05 09:29

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

 作者:超级宝宝11    来源:博客园

  对于一款web产品,页面中经常使用表格展示数据。同一个web产品,多个页面之间的表格,一般都是行列有差异,但是表格的构成元素以及样式类别都是相同的。
  1、便利操作
  这种情况下,可以定义一个表格类,使用页面表格的定位字符串进行初始化,提供一些便利操作。
  比如根据"申请号=166",找到对应的"申请时间"为"2021-12-15 08:41:14"
  实现思路为:
  根据表格定位字符串,找到表格的title行,title行的多个单元格内容组成一个列表,列表内容为:申请号、申请人、接收人、申请时间、数据流程、审批流程、文件名。
  根据表格定位字符串,找到表格的body,即数据区域,body是多行组成的一个列表。每一行又是由多个单元格组成的一个列表。所以body是一个二维列表。
  通过文本内容进行匹配,确定了“申请时间”为第4列,即目标单元在第4列。
  通过“申请号=166”,确定了目标单元在第3行。
  所以目标单元格为body[3][4]对应的页面元素。
  代码实现如下:
  class Table():
      def __init__(self,driver,locator_type="class name",table_locator="v-table-class"):
          self.table = driver.find_element(locator_type,table_locator)
          self.table_title = self.table.find_element_by_class_name("v-table-title-class")
          self.table_body = self.table.find_element_by_class_name("v-table-body-class")
          self.table_title_cells = self.table_title.find_elements_by_tag_name("td")
          self.table_body_rows = self.table_body.find_elements_by_tag_name("tr")
          self.table_body_cells = []
          for tr in self.table_body_rows:
              self.table_body_cells.append(tr.find_elements_by_tag_name("td"))
          self.table_title_cells_text = []
          for td in self.table_title_cells:
              self.table_title_cells_text.append(td.get_attribute("innerText"))
      def filter(self,col1_title,col1_value,col2_title):
          assert col1_title in self.table_title_cells_text
          assert col2_title in self.table_title_cells_text
          col1 = self.table_title_cells_text.index(col1_title)
          col2 = self.table_title_cells_text.index(col2_title)
          row = None
          for j in range(len(self.table_body_cells[col1])):
              if col1_value == self.table_body_cells[j][col1].get_attribute("innerText"):
                  row = j
          assert row != None
          return self.table_body_cells[row][col2]
  使用举例: 查找申请号=166对应的文件名,代码如下:
  table_approval_records = Table(driver)
  ele = table_approval_records.filter("申请号","166","文件名")
  找ele元素后,可以通过ele.get_attribute("innerText")获取元素文本或者执行点击操作。
  2、优化方向
  目前只支持通过一列的数据进行过滤获取一列的数据。可以扩展为通过多列数据进行过滤,返回多列的数据。
  3、导航菜单
  方式一:使用selenium点击定位元素,在各个页面间跳转。成本高。
  方式二:直接访问各个页面的地址,在各个页面间跳转。方便快捷。
  class Menu():
      def __init__(self,driver,address="192.168.11.171"):
          self.navigation = {
              "zong_lan_mian_ban":"https://{address}/#/dashboard/dhdlinks/system".format(address=address),
              "shen_pi_shen_qing":"https://{address}/#/approval/management".format(address=address),
              "shen_pi_liu_cheng":"https://{address}/#/process/flows".format(address=address),
              "shen_pi_ji_lu":"https://{address}/#/approval/history".format(address=address),
              "shen_pi_she_zhi":"https://{address}/#/approval/approval_setting/email_setting".format(address=address)
          }
          self.driver = driver
      def goto(self,submenu):
          self.driver.get(self.navigation[submenu])

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号