2014-07-17 1 views
0

У меня есть таблица slickgrid, которую я пытаюсь прочитать в памяти с помощью watir-webdriver. Поскольку полные данные часто не видны без прокрутки вниз, я хочу создать функцию, которая может прокручивать таблицу, а также иметь возможность подсчитывать количество всех строк, а также доступ к любой строке, которая может быть или не быть скрыта внутри Это. Вот то, что я до сих пор:Прокрутка и чтение таблицы slickgrid в память

class SlickGridTable 

def initialize(element) 
       @element = element 
end 
     ... 

     def scroll_down 
       location_y = 23 
       while true 
         location_y += 1 
         $browser.execute_script("arguments[0].scrollBy(0, #{location_y});", @element) 
       end 
     end 
end 

Однако я регулярно получаю эту ошибку:

Selenium::WebDriver::Error::UnknownError: unknown error: undefined is not a function

ответ

2

Я также работаю с slickgrid, и считал подобный подход. Вместо этого я расширил класс Watir :: Div с помощью метода scroll_until_present. Теперь мы можем прокручивать до настоящего времени, а затем работать с данными в сетке. У меня не было необходимости собирать все данные после их реализации. Не решает проблему с подсчетом строк, но помогает найти записи, которые вы ожидаете увидеть.

# Extends the Watir::Div class to support slick grids 
module Watir 
    class Div 
    # scrolls until it finds the item you are looking for 
    # can be used like wait_until_present 
    def scroll_until_present 
     scroll_height = browser.execute_script('return document.getElementsByClassName("slick-viewport")[0].scrollHeight') 
     (0..scroll_height).step(20).each { |item| 
      browser.execute_script('document.getElementsByClassName("slick-viewport")[0].scrollTop = ' + item.to_s) 
      if present? 
       # scroll a little more once the record is found 
       item += 30 
       browser.execute_script('document.getElementsByClassName("slick-viewport")[0].scrollTop = ' + item.to_s) 
       break 
      end 
     } 
    end 
    end 
end