Идентификация вновь добавленного элемента с использованием CssSelector через Selenium и Java - PullRequest
2 голосов
/ 11 апреля 2019

У меня есть элемент, который получает новый селектор css после добавления соответствующего элемента, поэтому каждый раз, когда я добавляю элемент на страницу, этот элемент добавляется как последняя запись, так как я могу обнаружить и поймать его селектором css?

WebElement changingselec = driver.findElement(By.cssSelector("body > app > div > manage-corr-app > div > div.flex-5.work-area-large > manage-user-recipient-groups > div > div:nth-child(10)"));

changingselec.click();

Обратите внимание, что div:nth-child(10) указывает на то, что последняя текущая запись является десятой, если я добавлю новую, ее селектор отобразит этот раздел как div:nth-child(11), поэтому я не могу предсказать правильныйселектор целевого объекта.

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

В CSS есть селектор: last-child. Попробуйте это

WebElement changingselec = driver.findElement(By.cssSelector("body > app > div > manage-corr-app > div > div.flex-5.work-area-large > manage-user-recipient-groups > div > div:last-child"));
0 голосов
/ 12 апреля 2019

Мой старший коллега на работе нашел ответ на мой вопрос следующим образом:

String changingselec = "";

int lastChildIndex = driver.findElements(By.cssSelector("body > app > div > manage-corr-app > div > div.flex-5.work-area-large > manage-user-recipient-groups > div > div.panel")).size(); 

//I replaced the last section in the selector above > div:nth-child(10) by > div.panel because all elements share the same parent panel

changingselec = driver.findElement(By.cssSelector("body > app > div > manage-corr-app > div > div.flex-5.work-area-large > manage-user-recipient-groups > div > div.panel:nth-child(" + Integer.toString(lastChildIndex) + ")")).click();

Надеюсь, это поможет.

0 голосов
/ 11 апреля 2019

Если только что добавленное <div> является последним дочерним элементом его родителя, тогда решение @ MateMrše просто идеально.

  • Использование div:last-child: выбор каждогоdiv элемент, который является последним дочерним элементом своего родителя:

    WebElement changingselec = driver.findElement(By.cssSelector("body > app > div > manage-corr-app > div > div.flex-5.work-area-large > manage-user-recipient-groups > div > div:last-child"));
    

Включает только что добавленный <div> последний последний дочерний элемент типа <div>его родителя, то вам нужно:

  • Использовать div:last-of-type: выбирает каждый <div> элемент, который является последним <div> элементом его родителя:

    WebElement changingselec = driver.findElement(By.cssSelector("body > app > div > manage-corr-app > div > div.flex-5.work-area-large > manage-user-recipient-groups > div > div:last-of-type"));
    
...