Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Selenium和Java使用CssSelector识别新添加的元素_Java_Selenium_Selenium Webdriver_Css Selectors_Katalon Studio - Fatal编程技术网

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

通过Selenium和Java使用CssSelector识别新添加的元素,java,selenium,selenium-webdriver,css-selectors,katalon-studio,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

我有一个元素,在添加了它各自的项目后,它会得到不同的新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"));

如果新添加的
是其父级的最后一个子级,那么@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"));
    
    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"));
    

如果新添加的
是其父级
类型的最后一个子级,则需要:

  • 使用
    div:last of type
    :选择父元素的最后一个
    元素:

    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"));
    
    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();
我希望这有帮助