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