【问题标题】:Locating element with id having underscore带有下划线的 id 的定位元素
【发布时间】:2015-07-18 16:06:21
【问题描述】:

首先,我是 selenium 的新手,正在尝试自动化。 我遇到了“XPATH”动态变化的问题。只有 xpath 的第一部分和最后一部分是常量,但问题是第一部分和最后一部分都有“下划线”,我的表达方式无法识别。

我的 Xpath:

ctl00_m_g_1140dfe4_4238_447b_b837_a62e12617b03_ctl00_rptLeftNav_ctl00_rptLeftNavSubCat_ctl00_lnkNavSubCat

我已尝试使用以下 webdriver 代码:

dr.findElement(By.xpath("//input[@id[contains(., '_ctl00_rptLeftNavSubCat_ctl00_lnkNavSubCat')]]")).click;

但是,我收到如下错误消息。

org.openqa.selenium.NoSuchElementException: 没有这样的元素

我在某处读到“下划线”不能在正则表达式中使用,是真的吗?有人可以在这里提供解决方案吗?将不胜感激。

【问题讨论】:

  • 您能提供一个实际的 HTML 示例吗?没有它,任何答案都将是猜测工作。由于问题似乎与下划线无关。

标签: java regex selenium xpath selenium-webdriver


【解决方案1】:

id 属性中的这些数字看起来像是动态生成的。相反,找到检查rptLeftNavrptLeftNavSubCatlnkNavSubCat 的元素:

//input[contains(@id, 'rptLeftNav') and contains(@id, 'rptLeftNavSubCat') and contains(@id, 'lnkNavSubCat')]

您还混淆了 XPath 和正则表达式。这里我们只讨论 selenium webdriver 并编写 XPath 表达式来定位元素。

您可能还需要等待元素出现

WebDriverWait wait = new WebDriverWait(webDriver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[contains(@id, 'rptLeftNav') and contains(@id, 'rptLeftNavSubCat') and contains(@id, 'lnkNavSubCat')]")));

【讨论】:

  • @SamuelSudhir 您在页面上看到任何 iframe 元素吗?
  • 感谢@alexce,但不幸的是我面临同样的错误,也许是因为我有与上面提到的类似 xpath 的元素。例如,让我给你两个 xpath,如下所示。 XPATH 1:ctl00_m_g_1140dfe4_4238_447b_b837_a62e12617b03_ctl00_rptLeftNav_ctl00_rptLeftNavSubCat_ctl00_lnkNavSubCat
  • @Alexce :我没有看到任何这样的 iframe 元素。
  • @SamuelSudhir 我在答案中添加了更多信息,请查看。
  • @Alexce :感谢您的快速回复,让我现在试试吧。
【解决方案2】:

我的朋友在网上搜索时找到了解决方案。这可以使用“cssselector”解决。

dr.findElement(By.cssSelector("a[id^='ctl00'][id$='_ctl00_rptLeftNav_ctl00_lnkNavigation']")).click();

现在松了一口气:) !!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多