Monday, 22 December 2014

WebTable getRowwithText, rowcount, getcell data in selenium webdriver using ruby

 def getOrderData(order_id)
    #"//a[contains(text(), '3466')]"
    puts "get order data function inside #{order_id}"
    @order_row=nil
    iterateTable=1
    iRow=1

    #if an order doesn't exits then navigate to next page. iterate 3 times
    while iterateTable<=5
      #check for the order link in the page
      if existsElement(:xpath, "//a[contains(text(), '" + order_id + "')]")
        break
      else
        @elementRightNavigate.clickObj
        iterateTable=+1
      end
    end

    begin
      #get row count
      table=$browser.find_element(:xpath, "//table[@id='DataTables_Table_0']/tbody")
      iRows= table.find_elements(:tag_name, "tr")
      rowSize=iRows.length
      # puts   "row size is : #{rowSize}"

      #get row with cell text
      rows=$browser.find_elements(:xpath, "//table[@id='DataTables_Table_0']/tbody/tr")
      rows.each do |rw|
        if rw.text.include?(order_id.to_s)
          @order_row=$browser.find_element(:xpath, "//table[@id='DataTables_Table_0']/tbody/tr[" + iRow.to_s + "]")
          break
        end
        iRow=iRow+1
      end

      # get Cells data into an array
      unless @order_row.nil?
        a= Array.new(4)
        cells= @order_row.find_elements(:tag_name, "td")
        @cellData = Array.new(cells.length-1)
        i=0
        cells.each do |cell|
          puts cell.text
          @cellData[i]= cell.text
          i=i+1
        end
      end

    rescue Exception => e
      e.message
    end
    @cellData
  end


def existsElement(by, value)      #use elementExist instead..
    flag=false
    begin
      if $browser.find_element(by, value).displayed?
        flag=true
      end
    rescue Exception
    ensure
      return flag
    end
  end

No comments:

Post a Comment