【问题标题】:scrollIntoView() is scrolling to much downscrollIntoView() 向下滚动很多
【发布时间】:2016-02-07 09:29:56
【问题描述】:

我在 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()

【问题讨论】:

  • 您要点击哪个元素?列值是多少?
  • 我不想双击整行(我点击 td 元素,这将访问我想要的行)。我将编辑我的帖子。
  • 好吧,我想点击该行,让您的 xpath 指向它,因为它现在指向 td 元素。
  • 同样的结果。我很难过:(

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


【解决方案1】:

解决方案 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)

【讨论】:

  • 解决方案 2 工作正常,但我真的需要更清晰的方法:/
猜你喜欢
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 2019-05-13
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
相关资源
最近更新 更多