硒单击链接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的主要内容,如果未能解决你的问题,请参考以下文章