我是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用作具有不同环境和语言的更改。
非常感谢任何帮助。
答案 0 :(得分:0)
选择器的这一部分:href$='site_url/medications'
表示href
应以site_url/medications
结尾,但这不是真的,这就是您没有得到匹配的原因。
我们如何将其简化为" href包含''":
a[href*=medications]
答案 1 :(得分:0)
使用以下代码。它对我来说很好: -
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代码,以便我们为您确定准确的定位器。
希望它会对你有所帮助:)。
答案 2 :(得分:0)
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”的元素 串。