Selenium查找Java中更改的xPath ID元素

Selenium查找Java中更改的xPath ID元素,java,regex,selenium,selenium-webdriver,Java,Regex,Selenium,Selenium Webdriver,我有这个xPath:/*[@id=“searchpopusch\u USER\u 14966893882343”] 但在后端,13位数字实际上是一个时间戳,因此每次重新测试/重新单击时它都会更改 比如说, 1st选项卡,//*[@id=“searchpopusch\u USER\u 14966893882343”] 第二个选项卡,//*[@id=“searchpopusch\u USER\u 149669488441”] 是否有目标不断变化的ID 我曾想过使用Reg Exp,但不知怎的,我有点阻

我有这个xPath:
/*[@id=“searchpopusch\u USER\u 14966893882343”]

但在后端,13位数字实际上是一个时间戳,因此每次重新测试/重新单击时它都会更改

比如说,

1st选项卡,//*[@id=“searchpopusch\u USER\u 14966893882343”]
第二个选项卡,//*[@id=“searchpopusch\u USER\u 149669488441”]

是否有目标不断变化的ID

我曾想过使用Reg Exp,但不知怎的,我有点阻塞

    String frameID = "//*[@id=\"searchpopupSCH_USER_";
    String regExp = "\\d{13}";

    Pattern p = Pattern.compile(frameID + regExp);

    WebElement xPathUserList;
    xPathUserList.findElement(By.xpath(p));  //param of xpath only take String 
我关心的是WebElement

您如何通过.Path(“/*[@id=\”searchpopupSCH\u用户\uuuxxxxxxxx”确定目标


感谢您的输入。

使用包含?甚至

 //*[contains(@id, "searchpopupSCH_USER_")]
 //*[starts-with(@id, "searchpopupSCH_USER_")]

声明如下所示的变量:

public static final String TIME_STAMP = new SimpleDateFormat("ddMMyyHHmmss").format(Calendar.getInstance().getTime());
然后在xpath中:

driver.findElement(By.xapth("//htmltag[@id="searchpopupSCH_USER_".concat(TIME_STAMP + "]"));

根据您的要求,您可以更改日期格式。

您不能只检查值是否以
searchpopusch\u USER\u
开头吗?
/*[以(@id,“searchpopusch\u USER”)开头]
为什么不使用
选项卡/tab的父元素?
?是的,我可以,但您如何定位该WebElement?通过.id(“string”\u 1234567800123很容易实现“但下次运行测试时,它将崩溃,因为它不再是同一个数字。可以肯定的是,祖先中有一个定义良好的父项。然后您可以沿着链查找选项卡元素。好的,它可以使用此..
driver.findElement(By.xpath(“/*[@class='loadMore results']/div[1]/a[1]”)。单击()
非常不幸,我们无法直接通过Id 1提交+从另一个开发人员推送来定位它。整个脚本将再次崩溃。这可能不够,因为可能还有其他元素没有以数字结尾,它们将被返回。你们真的使用了Id不正确的方式吗?)好的,您可以使xPath依赖于一些相关元素,如一些父元素等。一些html将非常有用),或者您可以收集ID以“searchpopupSCH_USER_14”开头的所有元素,并只过滤“USER_14”后面有数字的元素OP希望处理在Html中添加的时间戳。不希望附加自创建的时间戳timestamp@D.Yan,你能分享你的DOM的截图吗?