'Perfrom scroll action.
Usage:
d().scroll(steps=50) # default vertically and forward
d().scroll.horiz.forward(steps=100)
d().scroll.vert.backward(steps=100)
d().scroll.horiz.toBeginning(steps=100, max_swipes=100)
d().scroll.vert.toEnd(steps=100)
d().scroll.horiz.to(text="Clock")'

@property
def scroll(self):

    def __scroll(vertical, forward, steps=100):
        method = (self.jsonrpc.scrollForward if forward else self.jsonrpc.scrollBackward)
        return method(self.selector, vertical, steps)
    def __scroll_to_beginning(vertical, steps=100, max_swipes=1000):
        return self.jsonrpc.scrollToBeginning(self.selector, vertical, max_swipes, steps)
    def __scroll_to_end(vertical, steps=100, max_swipes=1000):
        return self.jsonrpc.scrollToEnd(self.selector, vertical, max_swipes, steps)
    def __scroll_to(vertical, **kwargs):
        return self.jsonrpc.scrollTo(self.selector, Selector(**kwargs), vertical)
    @param_to_property(dimention=['vert', 'vertically', 'vertical', 'horiz', 'horizental', 'horizentally'], action=['forward', 'backward', 'toBeginning', 'toEnd', 'to'])
    def _scroll(dimention='vert', action='forward', **kwargs):
        vertical = (dimention in ['vert', 'vertically', 'vertical'])
        if (action in ['forward', 'backward']):
            return __scroll(vertical, (action == 'forward'), **kwargs)
        elif (action == 'toBeginning'):
            return __scroll_to_beginning(vertical, **kwargs)
        elif (action == 'toEnd'):
            return __scroll_to_end(vertical, **kwargs)
        elif (action == 'to'):
            return __scroll_to(vertical, **kwargs)
    return _scroll
