scrollIntoView()滚动到很低的位置

时间:2015-11-06 09:22:02

标签: python selenium scroll selenium-webdriver automated-tests

我在selenium中测试过(使用Python和FirefoxWebdriver)。在测试网站上我有记录表,我想点击这个表中的元素,但我必须滚动到这个元素,然后我可以点击它。

要滚动我正在使用此方法:

def scroll_to_element(self, element):
    try:
        self.driver.execute_script("return arguments[0].scrollIntoView();", element)

    except Exception as e:
        print 'error scrolling down web element', e

但是这种方法会向下滚动。元素是cca 2行上面仍然不可见。有没有其他方法,可以滚动到元素?我根本没有这些脚本的经验。

这是表格:

<table id="idMainGriddata_columns" agname="data_columns" userid="1" entityidcolumnname="dc_id" editable="1" border="0" class="adodb_dbgrid" scrollx="0">
    <colgroup>
        <col width="25">
        # ...
    </colgroup>
    <tbody>
        <tr entityid="14" class="adodb_dbgrid_even_row">
            <td class="centered" value="14">...</td>
            # ...
        </tr>
        # ... 400x tr
    </tbody>
</table>

这是使用该方法:

variable = driver.find_element_by_xpath("//table[@id='idMainGriddata_columns']/tbody/tr/td[contains(text(), '" + column + "')]")
st.scroll_to_element(self, variable)
actions = ActionChains(self.driver)
actions.move_to_element(variable)
actions.double_click(variable)
actions.perform()

1 个答案:

答案 0 :(得分:4)

解决方案1 ​​

如果您只需要点击您可以执行的元素:

driver.find_element_by_xpath("//table[@id='idMainGriddata_columns']/tbody/tr/td[contains(text(), '" + column + "')]").click()

如果你实现了Js,它应该滚动到它。

解决方案2(脏路)

如果您的列变量是整数:

column += 2

解决方案3

将alignToTop添加到scrollIntoView:

self.driver.execute_script("return arguments[0].scrollIntoView(true);", element)