【问题标题】:selenium click link href with javascript硒单击链接href与javascript
【发布时间】:2016-05-17 15:38:47
【问题描述】:

我是 java 和 selenium 的新手。我在单击 href 中带有 javascript 的链接时遇到问题。 以下是页面来源:

href="javascript:navigateToDiffTab('https://site_url/medications','Are you sure you want to leave this page without saving your changes?');" tabindex="-1">Medications

请注意:出于业务考虑,我将实际网址替换为“site_url”。

我尝试了下面的代码,但它不起作用:

driver.findElement(By.cssSelector("a[href^='javascript:navigateToDiffTab'][href$='site_url/medications']")).click();

我不想使用 id 或 linkText,因为它们会随着不同的环境和语言而变化。

任何帮助将不胜感激。

【问题讨论】:

  • 按照 alexce 的建议,您需要检查您的定位器。此外,如果它是一个弹出窗口并且在不同的框架中,您将需要处理上下文切换。您可以参考:stackoverflow.com/questions/35252648/…
  • 谢谢各位。我尝试了 Shubham 的方法。成功了!

标签: javascript java selenium selenium-webdriver href


【解决方案1】:

选择器的这一部分:href$='site_url/medications' 意味着 href 应该以 site_url/medications 结尾,这是不正确的,这就是你没有得到匹配的原因。

我们如何将其简化为“href 包含'药物'”:

a[href*=medications]

【讨论】:

    【解决方案2】:

    使用下面的代码。它对我来说很好用:-

    WebElement element= driver.findElement(By.cssSelector("a[href^='javascript:navigateToDiffTab'][href$='site_url/medications']"))
    
    JavascriptExecutor executor = (JavascriptExecutor) driver;
    executor.executeScript("arguments[0].click();", element);
    

    如果上述代码对您不起作用,则表示您的定位器存在问题。然后尝试使用其他定位器或在您的问题中发布一些 HTML 代码,以便我们为您识别准确的定位器。

    希望对你有帮助:)

    【讨论】:

      【解决方案3】:

      alexce has already identified href$='site_url/medications' 进行后缀匹配的问题,但总结和解释您可以使用的各种 CSS attribute selectors 可能会有所帮助。

      [attr]表示属性名为attr的元素。

      [attr=value] 表示属性名称为 attr 且其值恰好为“value”的元素。

      [attr~=value] 表示属性名称为 attr 的元素,其值为以空格分隔的单词列表,其中之一是 正是“价值”。

      [attr|=value] 表示属性名为 attr 的元素。它的值可以恰好是“值”,也可以以“值”开头 紧跟“-”(U+002D)。它可以用于语言 子码匹配。

      [attr^=value] 表示属性名为 attr 且其值以“value”为前缀的元素。

      [attr$=value] 表示属性名为 attr 且其值以“value”为后缀的元素。

      [attr*=value] 表示属性名称为 attr 且其值包含至少一次出现的字符串“value”的元素为 子字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-31
        • 2012-04-28
        • 1970-01-01
        • 2020-04-15
        • 2013-09-07
        • 1970-01-01
        • 2017-10-20
        相关资源
        最近更新 更多