硒单击链接href与javascript

Posted

技术标签:

【中文标题】硒单击链接href与javascript【英文标题】:selenium click link href with 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 的建议,您需要检查您的定位器。此外,如果它是一个弹出窗口并且在不同的框架中,您将需要处理上下文切换。您可以参考:***.com/questions/35252648/… 谢谢各位。我尝试了 Shubham 的方法。成功了! 【参考方案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”的元素为 子字符串。

【讨论】:

以上是关于硒单击链接href与javascript的主要内容,如果未能解决你的问题,请参考以下文章

单击带有硒和python的href按钮?

当我尝试使用for循环单击所有链接时,硒显示陈旧错误?

硒 - 不可点击的链接[重复]

我可以通过硒获取链接位置吗?

单击硒作为双击

如何让硒单击动态按钮?