通过Selenium和Java使用CssSelector识别新添加的元素



我有一个元素,在添加其各自的项目后会获得不同的新 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),因此我无法预测目标项的正确选择器。

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"));

如果新添加的<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"));
    

我在工作中找到了我的老同事对我的问题的答案如下:

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();

我希望这有所帮助。

最新更新