Selenium元素隐藏在浮动标题

时间:2015-12-30 15:26:17

标签: selenium selenium-webdriver

如果需要滚动,Selenium webdriver定位器总是将元素放在页面顶部,但它不会考虑浮动标题。目前我用

创建了一个解决方法
Actions actions = new Actions(this.webdriver);
actions.sendKeys(Keys.ARROW_UP).perform();

是不是有一个更好的解决方案告诉webdriver将一个元素置于屏幕中间而不是固定距离顶部?

橙色部分来自按钮,蓝色部分是标题:

hidden button in orange

4 个答案:

答案 0 :(得分:1)

使用javascript将元素置于视图中。这是一个可能的解决方案:

  1. 使用selenium api将元素放入视口。
  2. 使用javascript来判断该元素是否被其他元素阻挡,(浮动页眉/页脚等...)。
  3. 使用javascript滚动到视口的中间。
  4. 请参阅我在此处创建的javascript实用程序类:https://github.com/gterre/stuff

    用法... JavascriptUtils.bringIntoView(WebElement元素);

    我确信您可以根据需要修改脚本。

答案 1 :(得分:1)

Selenium还能够在与项目交互之前不将项目滚动到窗口顶部(因此将它们隐藏在浮动标题后面),而是隐藏在底部。

这是通过'elementScrollBehavior'功能实现的,该功能可以设置为1以将内容滚动到底部。

请参阅this stack overflow for how it's done in capybara

答案 2 :(得分:1)

就我而言,我选择隐藏浮动元素。

top = dr.find_element_by_xpath('//div[@node-type="top_all"]')
dr.execute_script("arguments[0].setAttribute('style','display:none')", top)

之后,移动到我想要的元素,我甚至可以添加偏移量。

答案 3 :(得分:0)

我解决了这样的问题,所以你只需要定义你的元素不在范围内的情况并添加这个方法,它会自动将其滚动到视图中:

public void scroll_element_into_view(WebElementFacade element) { int Y = (element.getLocation().getY() - 200); JavascriptExecutor js = (JavascriptExecutor) getDriver(); js.executeScript("javascript:window.scrollTo(0," + Y + ");");}

适用于您可以通过id,css,xpath或任何其他方式找到的每个元素。