使用Selenium和Java获取弹出窗口中的元素计数

使用Selenium和Java获取弹出窗口中的元素计数,java,selenium,selenium-webdriver,phantomjs,ghostdriver,Java,Selenium,Selenium Webdriver,Phantomjs,Ghostdriver,我在Java中使用Selenium和PhantomJsDriver编写测试用例 硒-3.0.1 幻影JS-2.1.1 预期情景: 打开一个弹出式页面,找到弹出式页面中的元素数量(实际上是在弹出式页面中显示的项目) 在任何给定的时间点,弹出窗口中只能有3个元素。所以我在这里做一个断言 下面是相同的代码 使用findElements方法使用类名 List<WebElement> foundItems = By.className("className").findElements(d

我在
Java
中使用
Selenium
PhantomJsDriver
编写测试用例

  • 硒-3.0.1

  • 幻影JS-2.1.1

预期情景: 打开一个弹出式页面,找到弹出式页面中的元素数量(实际上是在弹出式页面中显示的项目)

在任何给定的时间点,弹出窗口中只能有3个元素。所以我在这里做一个断言

下面是相同的代码

  • 使用
    findElements
    方法使用类名

    List<WebElement> foundItems = By.className("className").findElements(driver);
    
    int count = foundItems.size();
    
  • 在这两种情况下,我的计数都是错误的,我总是将计数作为弹出页面中元素的倍数

    但是,如果我迭代
    列表
    并使用
    .isDisplayed()
    方法并维护一个标志,它将为我提供正确的计数

    我认为这可能是由
    phantomJsDriver
    维护的缓存或本地存储问题

    如何使用
    Selenium
    Java
    清除缓存或本地存储


    或者有没有其他方法来完成它。

    您应该提供页面的HTML,以便我们可以帮助您

    对于本地存储,您可以使用javascript删除它,这应该可以正常工作:

    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("window.localStorage.clear();");
    

    答案取决于两件事:

  • 你到底想知道的是什么
  • 页面使用什么方法隐藏控件
  • 在下面的示例中,我展示了一个XPath,它将显示输入控件的数量,不包括指定为“hidden”类型的控件

    driver.findElements(By.xpath("//input[not(@type='hidden')]")).size();
    
    在我测试的页面上,//input返回了6项,但我只看到了4项。添加额外的限定符将找到的数字增加到4

    或者,您可以获取您要查找的每种类型的计数,并累加这些数字,即:

    int eleCount = driver.findElements(by.xpath("//input")).size() +
                   driver.findElements(by.xpath("//a")).size() +
                   driver.findElements(by.xpath("//h1")).size();
    

    将相应地返回输入元素、锚和标题的数量。如果您需要了解更多信息,请检查更多的标记名。

    那么弹出页面可能会将以前的计数维护为本地存储?如果我使用JavascriptExecutor,将清除所有这些内容,并在最近的弹出窗口中获得新的计数。
    int eleCount = driver.findElements(by.xpath("//input")).size() +
                   driver.findElements(by.xpath("//a")).size() +
                   driver.findElements(by.xpath("//h1")).size();