每天 xpath 都在变化

every day xpath are changing

driver.findElement(By.xpath("//*[@id=\"__box23-arrow\"]")).click();dropdown
        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
        Thread.sleep(5000);
        driver.findElement(By.xpath("//*[@id=\"__item1283-__box23-2\"]")).click();

每次我的 xpath 改变时 //*[@id=\"__box23-arrow\ example //*[@id=\"__box24-arrow\,我正在为 SAP 做自动化,你能提供任何其他解决方案吗

如果你知道你的 id 的开头,在这种情况下你可以选择

"//*[@id*='__box']"

这将为您提供 ID 以“__box”开头的元素

希望对您有所帮助!

您也可以使用 contains 关键字编写动态 xpath。

请参考下面的例子-

//a[contains(@id, 'ctl00_btnAircraftMapCell') 

根据您与我们分享的 HTML,您可以尝试使用此 xpath

//span[@role='button' and contains(@class,'sapMComboBoxArrow sapMComboBoxBaseArrow sapMComboBoxTextFieldArrow')]

如果你的 xpath 总是在变化,为了让你的 Selenium 代码工作至少应该有一些变化的模式,例如它可能依赖于当前日期。然后,您可以相应地编写代码,以便在每次 运行 您的脚本时动态生成您的 xpath。如果没有这样的模式,也没有静态内容可以在 xpath 中使用 contains,您应该检查其他工具,如 Sikuli。它使用图像识别来识别您的元素。这再次假设您的元素的可见方面保持不变。

还有一波由 AI 驱动的新测试产品,如 Testim "self healing",这意味着它们将适应源代码的变化。我没用过它们,但它们可能是你想要的。