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

时间:2019-04-11 08:03:24

标签: java selenium selenium-webdriver css-selectors katalon-studio

我有一个元素,在添加其各自的项目后会得到不同的新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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我的老同事在工作中发现了以下问题的答案:

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

我希望这会有所帮助。