每天 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",这意味着它们将适应源代码的变化。我没用过它们,但它们可能是你想要的。
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",这意味着它们将适应源代码的变化。我没用过它们,但它们可能是你想要的。