Невозможно найти ожидаемое количество элементов в селене - PullRequest
0 голосов
/ 19 апреля 2019

Когда поиск элемента в chrome с использованием поля поиска inspect element по xpath '// * [содержит (@ id,' a ')]', тогда общее количество найденных элементов равно 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 голосов
/ 21 апреля 2019
  • Причина, по которой вы получаете другое количество узлов, состоит в том, что в DOM есть iframe элементы. Внутри iframe есть даже iframe.

  • При поиске в инструментах Chrome Dev отображаются все элементы, в том числе и внутри фреймов.
    Но когда вы используете селен, он не обращается к 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()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...