无法在硒中找到预期的元素数量

萨钦·夏尔马

当通过 xpath '///*[contains(@id,'a')]' 在 chrome 中使用检查元素搜索框搜索元素时,找到的元素总数为 43,但是当在 selenium 代码中使用相同的 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();
艾哈迈德
  • 您获得不同数量的节点的原因是在 DOM 中有iframe元素。甚至还有iframe一个iframe.

  • 当您在 chrome 开发工具中搜索时,它会显示所有元素,包括框架内的元素。
    但是当您使用 selenium 时,它不会访问框架内的 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()));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章