滚动到 Web 驱动程序中 bootstrap 模式中的元素不起作用

Scrolling to a element in bootstrap modal in web driver is not working

我正在尝试通过 Web 驱动程序关闭 bootstrap 模式 script.The 模式在 bottom.I 处有关闭按钮 我正在尝试滚动到该元素然后单击该元素但是它不是 working.when 使用的 moveToELement(toElement) 脚本抛出的方法

MoveTargetOutOfBoundsException: Offset within element cannot be scrolled into view:" exception

。所以我尝试了 javascript 滚动方法,另一个 way.They 没有抛出任何异常,但它也没有用。下面是代码

        WebDriver d=new FirefoxDriver();
        d.get("http://getbootstrap.com/javascript/");
        d.findElement(By.linkText("Modal")).click();
        d.findElement(By.cssSelector("button[data-target='#myModal']")).click();
        WebElement e=d.findElement(By.className("btn-default"));    
//using moveToElement
        Actions a=new Actions(d);
        a.moveToElement(e).click().build().perform();
//using js scroll
        JavascriptExecutor js=(JavascriptExecutor)d;
        Point p=e.getLocation();
        int y=p.getY();
        int x=p.getX();
        js.executeScript("scroll("+x+","+y+")");
        e,click();
//another way 
        Coordinates coordinate = ((Locatable)e).getCoordinates(); 
        coordinate.onPage(); 
        coordinate.inViewPort();
        e.click();

关于如何解决的任何建议 this.Thanks 提前

它不起作用的原因是您的元素 Close 在模态对话框下。所以你的 className 不会起作用,因为在模式对话框和 html 中有多个元素使用 class。尝试使用 xpath 作为:

.//*[@id='myModal']//button[text()='Close']

如果你也想进行滚动,可以通过以下代码实现:

((JavascriptExecutor) d).executeScript("window.scrollBy(" + x + ","
            + y + ")", "");

其中 x 和 y 是通过给定 xpath 找到的元素的坐标。使用给定的 xpath 你只需要找到那个元素并执行 element.click().

以下是您的代码无法运行的原因:

  • 没有添加超时代码(Implicit/Explicit),这有时可能会导致与找不到元素相关的异常。
  • 最后,class-名称,您试图通过该名称找到 'Close' 按钮,即实际上 返回13 个不同的元素(使用 Firepath 检查时)。

下面的代码解决了上述所有问题并且也有效:

    WebDriver d=new FirefoxDriver();
    d.manage().window().maximize();//Maximizing window
    d.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);//Giving implicit timeout of 20 seconds

    //Navigating to the site
    d.get("http://getbootstrap.com/javascript/");

    //Clicking on the "Modal" Link text
    d.findElement(By.linkText("Modal")).click();

    //Clicking on the "Launch Demo modal" button
    d.findElement(By.cssSelector("button[data-target='#myModal']")).click();

    //Clicking on the Close button of opened Modal window       
    d.findElement(By.xpath("//div[@id='myModal']//button[.='Close']")).click();