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

时间:2017-01-20 10:16:27

标签: java selenium selenium-webdriver phantomjs ghostdriver

我正在使用Selenium中的PhantomJsDriverJava编写测试用例

  
      
  • Selenium - 3.0.1

  •   
  • PhantomJs - 2.1.1

  •   

预期情景: 打开一个弹出页面,在弹出页面中找到No of elements(实际上弹出的项目会显示在内)。

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

以下是相同的代码

  1. 使用findElements方法

    的班级名称
    List<WebElement> foundItems = By.className("className").findElements(driver);
    
    int count = foundItems.size();
    
  2. 使用Xpath

    int count = driver.findElements(By.xpath("//div[@class='className']")).size();
    
  3. 在这两种情况下,我的计数错误,我总是将计数作为弹出页面内的多个元素。

    但是,如果我遍历list并使用.isDisplayed()方法并保持一个标志,它会给我正确的计数。

    我认为这可能是phantomJsDriver维护的缓存或localStorage问题。

    如何使用SeleniumJava清除缓存或LocalStorage。

    或者还有其他方法可以完成它。

2 个答案:

答案 0 :(得分:0)

您应该提供您网页的HTML,以便我们为您提供帮助。

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

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

答案 1 :(得分:0)

答案取决于两件事:

  1. 你究竟想要得到什么?
  2. 该页面用于隐藏控件的方法
  3. 在下面的示例中,我展示了一个XPath,它将显示输入控件的数量,不包括那些被指定为类型&#39;隐藏的&#39;

    driver.findElements(By.xpath("//input[not(@type='hidden')]")).size();
    

    在我测试过的页面上,//输入返回了6项,但我只看到了4项。添加额外限定符会使发现的数字为4。

    或者,您可以获得您要查找的每种类型的计数,并累积数字,即:

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

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