Selenium元素隐藏在浮动标头后面

Selenium元素隐藏在浮动标头后面,selenium,selenium-webdriver,Selenium,Selenium Webdriver,如果需要滚动,SeleniumWebDriver定位器总是将元素放在页面顶部,但它不会考虑浮动标题。目前,我创建了一个解决方案 Actions actions = new Actions(this.webdriver); actions.sendKeys(Keys.ARROW_UP).perform(); 是否有更好的方法来告诉WebDebug在屏幕中间放置一个元素,而不是以一个固定的距离到顶部? 橙色部分来自按钮,蓝色部分是标题: 使用javascript查看元素。以下是一个可能的解决方案:

如果需要滚动,SeleniumWebDriver定位器总是将元素放在页面顶部,但它不会考虑浮动标题。目前,我创建了一个解决方案

Actions actions = new Actions(this.webdriver);
actions.sendKeys(Keys.ARROW_UP).perform();
是否有更好的方法来告诉WebDebug在屏幕中间放置一个元素,而不是以一个固定的距离到顶部?

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


使用javascript查看元素。以下是一个可能的解决方案:

  • 使用selenium api将元素引入视图端口
  • 使用javascript确定元素是否被另一个元素(浮动页眉/页脚等)阻挡
  • 使用javascript滚动到视图端口的中间
  • 请参见我在此处创建的javascript实用程序类:

    用法…JavascriptUtils.bringIntoView(WebElement)


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

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

    public void将元素滚动到视图中(WebElementFacade元素){
    int Y=(element.getLocation().getY()-200);
    JavascriptExecutor js=(JavascriptExecutor)getDriver();
    js.executeScript(“javascript:window.scrollTo(0,+Y+)”;”)}


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

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

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


    请参阅。

    在本例中,我选择隐藏该浮动元素

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

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

    关于这个问题的其他信息,如html页面的屏幕截图、实际html等,将为你的问题提供更多的上下文调整你的滚动方式,使所需元素处于可见阶段。你可以从robot类获得帮助,javascript执行器也可以根据需要滚动。这仅在可滚动容器是窗口时才有效。什么方法“getDriver()”?适用于页脚,等待轻微调整:“//footer”就足够了