我有一个元素,在添加其各自的项目后会获得不同的新 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();
我希望这有所帮助。