找不到硒中预期的元素数量

时间:2019-04-19 18:45:59

标签: java selenium

当通过xpath'// * [contains(@ id,'a')]'在chrome中使用检查元素搜索框的chrome中的搜索元素时,找到的元素总数为43,但是在硒代码中使用相同的xpath时,它将显示仅找到37个元素。

下面的

是硒代码。我什至尝试调查框架,但仍然没有得到预期的结果

driver.get("http://facebook.com");
        //System.out.println(driver.findElements(By.tagName("iframe")).size());
        List<WebElement> a = driver.findElements(By.xpath("//*[contains(@id,'a')]"));
        System.out.println(a.size());
        driver.switchTo().frame(0);
        List<WebElement>b=driver.findElements(By.xpath("//*[contains(@id,'a')]"));
        System.out.println(b.size());
        driver.switchTo().parentFrame();
        driver.switchTo().frame(1);
        List<WebElement>c=driver.findElements(By.xpath("//*[contains(@id,'a')]"));
        System.out.println(c.size());
        driver.switchTo().parentFrame();

1 个答案:

答案 0 :(得分:0)

  • 获得不同数量的节点的原因是在DOM中有iframe个元素。 iframe中甚至还有一个iframe

  • 在chrome开发工具中搜索时,它会显示所有元素,包括框架内的元素。
    但是,当您使用硒时,它不会访问框架内的DOM。 这就是为什么硒中的元素越来越少的原因。

  • 在切换帧时,实际上并不是在页面上所有可用的第二度帧中进行搜索。

我已经确定了缺少元素的帧。只是不要回到父级框架而再上一个层次,您会发现所有元素。

尝试以下代码,它将为您提供所需的结果。

    driver.get("https://www.facebook.com");

    List<WebElement> list = driver.findElements(By.xpath("//*[contains(@id,'a')]"));
    System.out.println("Main Page: "+list.size());

    //driver.switchTo().frame("captcha-recaptcha");
    driver.switchTo().frame(0);
    List<WebElement> list2 = driver.findElements(By.xpath("//*[contains(@id,'a')]"));
    System.out.println("In the iFrame: "+list2.size());

    //driver.switchTo().frame(driver.findElement(By.cssSelector("body > div.g-recaptcha > div > div > iframe")));
    driver.switchTo().frame(0);
    List<WebElement> list3 = driver.findElements(By.xpath("//*[contains(@id,'a')]"));
    System.out.println("In the second iFrame: "+list3.size());

    System.out.println("Full count: "+(list.size()+list2.size()+list3.size()));