博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Selenium-webdriver系列教程(13)————如何处理table
阅读量:6587 次
发布时间:2019-06-24

本文共 2887 字,大约阅读时间需要 9 分钟。

Table对象是自动化测试中经常需要处理的对象。由于webdriver中没有专门的table类,所以我们需要简单的封装出一个易用易扩展的Table类来帮助简化代码。

module EasyWrap    class EasyWrapError < StandardError;end     class NotValidElementError < EasyWrapError;end      class IncorrectdIndexError < EasyWrapError;end       class TableBase        attr_reader :e        def initialize e            raise NotValidElementError unless e.is_a?(Selenium::WebDriver::Element)            @e = e         end         def method_missing(m, *params, &blk)            @e.send(m, *params) if @e.respond_to?(m)        end    end #TableBase    class Table < TableBase        def initialize e            super(e)            __rows        end        def __rows            @rows = @e.find_elements(:css => 'tr')        end        private :__rows         def rows            all_rows = []               @rows.each { |r| rows << TableRow.new(r)}            all_rows        end         def row_count            @rows.size        end         def [](index)            valid_index? index            TableRow.new @rows[index]        end          def valid_index?(index)            raise IncorrectdIndexError if index.to_i > row_count        end    end #Table     class TableRow < TableBase        def initialize e            super(e)            __cells        end         def __cells             @cells = @e.find_elements(:tag_name => 'td')             # 如果找不到td那么试着去找th            @cells = @e.find_elements(:tag_name => 'th') if @cells.empty?        end        private :__cells         def cells            all_cells = []            @cells.each {|c| all_cells << TableCell.new(c)}         end         def cell_count            @cells.size        end         def [](index)            valid_index? index            TableCell.new @cells[index]        end         def valid_index?(index)            raise IncorrectdIndexError if index.to_i > cell_count        end    end #TableRow     class TableCell < TableBase    end #TableCellend #EasyWrap

EasyWrap定义了3个类

  • Table类,代表1个table对象,可以通过该对象来访问该table的行和列;

  • TableRow类 代表table的某1行,可以通过其访问table的某一列;

  • TableCell类 代表table的某1个单元格

假如我们需要点击table的第3行第1列,通过EasyWrap,我们可以这样来实现

talbe = EasyWrap::Table(dr.find_element(:id => 'table_id'))table[2][0].click

以下面的html代码为例:

            Table                        
C1 C2 C3
v1 v2 v3
k1 k2 k3

接下来的脚本实现了高亮页面上table元素首行首列的功能

require 'rubygems'require 'selenium-webdriver'require './easy_wrap'include EasyWrap dr = Selenium::WebDriver.for :firefoxtable_file = 'file:///'+File.expand_path(File.join(File.dirname(__FILE__), 'table.html'))dr.get table_filet = dr.find_element(:id => 't')table = Table.new tp table.row_counthighlight = <

转载地址:http://qhqno.baihongyu.com/

你可能感兴趣的文章
bzoj千题计划309:bzoj4332: JSOI2012 分零食(分治+FFT)
查看>>
iOS界面传值的方式(7种)
查看>>
将font-size设置为 12px 以下,Chrome浏览器只能显示12px怎么办?
查看>>
Android 系统名字、版本、API level的对应关系
查看>>
checkStyle使用手册
查看>>
MyEclipse weblogic Deploy Location项目名称不正确解决方案
查看>>
3月27日和28日的简单面试记录
查看>>
Scala中隐式类代码实战详解之Scala学习笔记-53
查看>>
lammps input for water
查看>>
echarts添加点击事件
查看>>
html实现“加入收藏”代码
查看>>
机器学习之最优化问题
查看>>
Selenium 详解xpath定位
查看>>
网页做复制功能
查看>>
PHP中如何对二维数组按某个键值进行排序
查看>>
SharePoint 2013 EventHanlder工具
查看>>
jQuery和javascript的区别
查看>>
doctest --- 一个改善python代码质量的工具
查看>>
hdu1290
查看>>
hdu2141Can you find it?
查看>>