【问题标题】:Selenium Automation unable to click the linkSelenium Automation 无法点击链接
【发布时间】:2017-05-25 09:59:39
【问题描述】:

我正在尝试为网站自动执行某些任务。在页面上有一个“移动到下一页”选项,它不是通常的链接,但是当我单击它时,它会将我带到下一页。代码如下。我尝试了所有可能的方法来通过 id、类名、xpath 和 css 选择器来定位它,但它们都不起作用。请帮助我找到处理 javascript:void(0) 案例的方法。我尝试了其他人提出的其他一些 stackoverflow 问题中的方法......这些也不起作用。

WebElement skip = driver.findElements(By.cssSelector("a[href*='javascript:void[0]']"));
skip.click();

【问题讨论】:

标签: java selenium xpath automation css-selectors


【解决方案1】:

您可以找到<a> 并在“移至下一页”文本上使用过滤器来定位您要查找的元素,除非您有多个带有该文本的元素。

还要检查 id 是否唯一,如果有多个具有该 id 的元素,则返回第一个命中。您可以使用 jQuery 正则表达式匹配来查找所有元素,并找到一种方法来定位该元素。

编辑: 使用您提供的源代码:

<a href = "javascript:void(0)" class="someclassname"> ::before "Move to next page" == $0</a>

忽略那些$0 & ::before 明显是从浏览器的开发者控制台复制过来的,应该是这样的:

<a href = "javascript:void(0)" class="someclassname">Move to next page</a>

因此,在 Selenium 中,您可以通过以下方式找到它:

String jsScript = "return $('a.someclassname:visible').filter(function () { return $(this).text() == 'Move to next page'; });";
Object object = ((JavascriptExecutor)this.driver).executeScript(jsScript, new Object[0]);
if (WebElement.class.isInstance(object))
{
    return (WebElement) object;
}
if (List.class.isInstance(object))
{
    return (WebElement) ((List)object).stream().filter(WebElement.class::isInstance).findFirst().orElse(null);
}
return null;

【讨论】:

  • @Anu,我已经编辑了答案,请试一试,分享你的发现。
  • 嗨,是否可以使用 java 进行定位。我在 eclipse 中使用 selenium 和 java
  • 我上面贴的例子是Java。
【解决方案2】:

使用下方xpath点击-

driver.findElement(By.xpath("//a[@class='someclassname'][contains(text(),'Move to next page')]")).click();

【讨论】:

  • 请看我的帖子,我现在已经更正了。 ::before "移至下一页" == $0 是什么意思?在这种情况下,“移至下一页”不是文本权利
【解决方案3】:

这些方法中的任何一个都应该有效

WebElement element = driver.findElement(By.linkText("Move to next page"));
element.isEnabled();
element.click();

WebElement element = driver.findElement(By.partialLinkText("Move to next page"));
element.isEnabled();
element.click();

【讨论】:

  • 我试过了。它没有给我这样的元素例外。我发现不寻常的是 a href = "javascript:void(0)" 。这是我没有遇到过的事情,我是编码新手。
  • 尝试在 Firefox 的 firefinder 插件中只给出 //a ,看看还有哪些其他独特的属性可以定位这个元素。
  • 我正在使用 chrome。我可以提供的另一个信息是所有这些东西都是 iFrame 的一部分。 onclick 链接也没有给出,因为它似乎被隐藏了
  • 既然您说它是 Iframe 的一部分,我相信您正在将焦点切换到 Frame。如果没有,请尝试将焦点切换到 iFrame,然后执行单击。 driver.switchTo().frame(getIframe().getAttribute("id")); isSwitchedToIframe = true; setIframeUrl(driver.getCurrentUrl());
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多