zoukankan      html  css  js  c++  java
  • Seleniumwebdriver系列教程(13)————如何处理table

    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 #TableCell
    end #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代码为例:

    <html>
        <head>
            <title>Table</title>
            <style>
                table {border: 1px solid #ccc}
            </style>
        </head>
        <body>
            <table id = "t">
                <th>C1</th><th>C2</th><th>C3</th>
                <tr>
                    <td>v1</td>
                    <td>v2</td>
                    <td>v3</td>
                </tr>
                <tr>
                    <td>k1</td>
                    <td>k2</td>
                    <td>k3</td>
                </tr>
            </table>
        </body>
    </html>
    

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

    require 'rubygems'
    require 'selenium-webdriver'
    require './easy_wrap'
    include EasyWrap
     
    dr = Selenium::WebDriver.for :firefox
    table_file = 'file:///'+File.expand_path(File.join(File.dirname(__FILE__), 'table.html'))
    dr.get table_file
    t = dr.find_element(:id => 't')
    table = Table.new t
    p table.row_count
    highlight = <<JS
        arguments[0].style.border = "2px solid red"
    JS
    dr.execute_script highlight, table[0][0].e
    # 打印第2行第2列的值
    puts table[1][1].text
    
  • 相关阅读:
    maven的安装教程
    Spring 历史及设计理念
    MySQL Connector / Python
    LDAP & implementation
    RESTful levels & HATEOAS
    事务隔离级别
    cookie 和 session
    正则表达式验证器regex validator
    hello2部分代码分析
    filter
  • 原文地址:https://www.cnblogs.com/nbkhic/p/2227028.html
Copyright © 2011-2022 走看看