Selenium Webdriver Onlink文本

时间:2016-06-15 18:48:33

标签: selenium selenium-webdriver

我应该使用webdriver中的哪个命令来确保它点击特定文本,即上个月

代码是

<div class="dt_padded_medium_div">
<a onclick="setLastMonth()" href="#">Last Month</a>

我通过使用firepath尝试了xpath,但仍然无法正常工作 它是

 //*[@id='block-2']/div/div[3]/table/tbody/tr[1]/td[5]

我用过

driver.findElement(By.xpath("//*[@id='block-2']/div/div[3]/table/tbody/tr[1]/td[5]")).click();

但仍然没有用,我错过了什么吗?

更新

让代码工作的人,感谢您的帮助!

7 个答案:

答案 0 :(得分:0)

如果页面中只有一个'a'元素,请尝试使用此XPath:

//a[text()='Last Month']

如果有多个元素,请发布完整的HTML树,否则我们无法在不知道标记路径的情况下编写xpath并确保它可以正常工作

答案 1 :(得分:0)

首先确保您的xpath正常工作,尝试使用更具体的xpath而不仅仅是td [5]或类似的smthn,例如上面可能是这样的: //div[@class='dt_padded_medium_div']/a[@href] - 意思是,我们需要找到具有特定父级的<div>元素,并且<a>元素中包含href属性

答案 2 :(得分:0)

你确定你的xPath是正确的吗?

在Firefox上安装 FirePath 并尝试使用xPath,如下面的屏幕截图所示。

此外,这看起来像一个冗长而脆弱的xPath。查找xPath cheat sheets以了解如何使xPath更加健壮。

在你的情况下,我会想象:

 //*[@id='block-2']/descendant::a[text()='Last Month']

(获取具有特定ID的元素,然后在该元素中搜索<a></a>,无论多深,使用特定文本)

enter image description here

答案 3 :(得分:0)

在你的问题中,你使用了一个&#34; id&#34;您的代码中未显示, @id =&#39; block-2&#39; 。您可能使用了错误的ID。为了帮助您,请提供完整的HTML代码吗?

根据您提供的信息,我建议的是:

确保您提供的Xpath是唯一的,您可以使用名为 Firebug 的Firefox附加组件。它将帮助您快速轻松地找到您所需的xpath。你需要做的基本上是:

  • 下载firefox并安装它;
  • 下载firebug附加组件并将其安装到firefox;
  • 您会注意到工具栏右上方有一个小错误符号,请启用它;
  • 您将看到控制台弹出,单击检查按钮并单击要检查的任何Web元素,其html代码将在控制台中突出显示;
  • 右键单击突出显示的代码,然后选择将其xpath复制到剪贴板。通过这种方式,您永远不会错误地使用xpath。

这是一个快速教程: http://www.wikihow.com/Find-XPath-Using-Firebug

P.S。找到webelement的方法不止一种,请考虑使用以下选项:

  • Css选择器
  • 班级名称
  • ID

此链接将引导您进入一个令人敬畏的作弊cheet。 http://scraping.pro/res/xpath-cheat/xpath_css_dom_recipes.pdf

希望它有所帮助。

答案 4 :(得分:0)

请尝试使用以下代码点击文字上个月

driver.findElement(By.xpath(".//a[text()='Last Month']")).click();

希望这有帮助。

答案 5 :(得分:0)

您可以使用以下代码点击包含“上个月”文字的链接

driver.findElement(By.linkText("Last Month")).click();

答案 6 :(得分:0)

有几种可能性。 如果您的网站没有被重写,您可以通过

获取链接名称
driver.findElement(By.linkName("Last Month");

如果你的网站有很多这样的重写,你也可以使用任何属性,只需在调用它时将“href”和“#”或“onclick”和“setLastMonth()”作为参数。

static WebElement getLink(String Attribute, String Value /*String ItemText*/){
List<WebElement> Elements = driver.findElements(By.tagName("a"));
    for(int Counter = 0, Counter < Elements.size(); Counter++){
        if(Elements.get(Counter).getAttribute(Attribute).contains(Value) /* && Elements.get(Counter).getText().equals(ItemText){
            return Elements.get(Counter);
        }
    }
return null;
}

如果删除注释,它将完全确定并检查属性和显示的文本。