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

时间:2015-01-29 10:41:47

标签: selenium selenium-webdriver webdriver

我试图通过Web驱动程序脚本关闭一个引导模式。模态底部有关闭按钮。我正在尝试滚动到该元素,然后单击该元素但它不起作用。当使用{{1脚本抛出的方法

  

MoveTargetOutOfBoundsException:元素内的偏移量不能   滚动到视图中:“异常

。所以我尝试了javascript滚动方法和另一种方式。他们没有抛出任何异常,但它也没有工作。以下是代码

moveToELement(toElement)

有关如何解决此问题的任何建议。谢谢提前

2 个答案:

答案 0 :(得分:1)

以下是您的代码无效的原因:

  • 尚未添加超时代码(隐式/显式),有时可能会导致与未找到元素相关的异常。
  • 最后,您尝试找到'关闭'的类名。按钮,即实际返回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();

答案 1 :(得分:0)

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

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

如果您还要执行滚动,可以通过以下代码实现:

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

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