gpt4 book ai didi

java - 为什么 Selenium 在点 (.) 字符后面附加一个反斜杠,对于其中包含 (.) 的 ID 属性的值产生 (\.)

转载 作者:行者123 更新时间:2023-11-30 05:29:04 24 4
gpt4 key购买 nike

我想在JAVA中使用selenium通过ID获取元素。当我尝试像这样查找元素时,相关元素的 ID 恰好有一个句点 id="myprojectId0.123456789"

WebElement projId = driver.findElement(By.id("mprojectId0.10724909303153396"));

我在控制台中收到此错误:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: #mprojectId0\.10724909303153396

由于某种原因,ID 属性值中的 . 字符被转换为 \.,因此无法找到该元素。请帮忙并提前致谢!

最佳答案

您的观察非常合理且符合预期。根据Official locator strategies for the webdriver中的讨论By.idSelenium 翻译到它等效的 By.cssSelector 中,并且由于 . 字符是特殊字符,因此它会自动 通过反斜杠转义,即\。因此:

By.id("mprojectId0.10724909303153396")

被翻译成

By.cssSelector("#mprojectId0\.10724909303153396")
<小时/>

解决方案

然而,id属性的值,即mprojectId0.10724909303153396对我来说看起来是动态的,并且每次都会改变HTML DOM被渲染。因此,您必须为 visibilityOfElementLocated() 引入 WebDriverWait,并且您可以使用以下任一动态定位器策略:

  • css选择器:

    WebElement projId = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[id^='mprojectId']")));
  • xpath:

    WebElement projId = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[starts-with(@id, 'mprojectId')]")));

关于java - 为什么 Selenium 在点 (.) 字符后面附加一个反斜杠,对于其中包含 (.) 的 ID 属性的值产生 (\.),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57929595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com