获取链接文本Selenium java

时间:2016-02-29 09:13:12

标签: java html selenium

我在获取链接文本时遇到问题。

在网站上我有文字链接 <a href="DetailsZZ-10048.html">ZZ-10048</a>ZZ-的一部分是静态的,数字递增,之前我不知道。我需要得到这个号码。

我曾经看过:Get link text - Selenium, Java但我有所有链接,网址(不是链接的文字)

我也尝试过:How to gettext() of an element in Selenium Webdriver但是每当我改变并寻找解决方案时我都会输出Printing null

解决方案:Java Selenium, how to get linkText (anchor) from link WebElement也不好,因为它无法识别"a[href*='ZZ-']"

所以,最接近的是:

List<WebElement> elements = driver.findElements(By.tagName("a")); 
for (int i = 0; i < elements.size(); i++) {
   System.out.println(elements.get(i).getAttribute("href"));
}

但我怎样才能更改为不仅查看网址,还查看链接的名称? (尤其是从ZZ-开始的

7 个答案:

答案 0 :(得分:4)

您好,您可以使用以下代码提取数字:

public String splitfunc(String str)
{
    str = str.replace(".html", "");
    String[] array = str.split("-"); 
    return array[1];
}


  List<WebElement> elements = driver.findElements(By.tagName("a")); 
  for (int i = 0; i < elements.size(); i++) {
   System.out.println(splitfunc(elements.get(i).getAttribute("href")));
}

答案 1 :(得分:1)

找到可以使用的元素

List<WebElement> elements = driver.findElements(By.partialLinkText("ZZ"));
// or
List<WebElement> elements = driver.findElements(By.cssSelector("[href*='ZZ']"));

要获取href和文本,您可以

for (WebElement element : elements) {
    String href = element.getAttribute("href");
    String text = element.getText();
    // or
    String text = element.getAttribute("innerText");

    // and to get the number
    String[] data = text.split("-");
    String number = data[1];
}

答案 2 :(得分:0)

由于您正在寻找链接的文本而不是实际的href URL本身,我认为它更清晰,更不容易抓取元素文本并使用它来解析而不是拉出href属性。然后,如果文本以ZZ-someNumber的形式始终,那么您可以使解析相当简单。

使用Java 8的示例(假设已经创建了驱动程序并加载了正确的页面):

String leadingStr = "ZZ-";
List< Integer > numbers = driver.findElements(By.tagName("a"))
                                .stream()
                                .map(WebElement::getText)
                                .filter(str -> null != str && str.startsWith(leadingStr))
                                .map(str -> str.replace(leadingStr,"").trim())
                                .filter(str -> !str.isEmpty())
                                .map(Integer::valueOf)
                                .collect(Collectors.toList());

没有流的示例:

String leadingStr = "ZZ-";
List< Integer > numbers = new ArrayList<>();
for (WebElement elem : driver.findElements(By.tagName("a"))) {
    String text = elem.getText();
    if (text.startsWith(leadingStr)) {
        numbers.add(Integer.valueOf(text.replace(leadingStr,"").trim()));
    }
}

当然,如果假设它们始终以ZZ-someNumber的形式无效,那么上述两个都需要更多的错误处理但是它只是一些简单的添加一些try catch块整数转换等

答案 3 :(得分:0)

如果您的语言级别允许,更优雅的方式是在没有索引超出范围异常风险的情况下使用foreach。

这将允许您按照您的请求获取链接的文本,而不是href并进行如此多的解析。

修剪只是额外的防御性编码。

List<WebElement> links = driver.findElements(By.tagName("a")); 
for (WebElement link : links ) {
   System.out.println(link.getText().replace("ZZ-","").trim());
}

答案 4 :(得分:0)

WebElement element = driver.findElement(By.partialLinkText("ZZ-10048"));
String txt = element.getText();
String[] words = txt.split("-");
System.out.println(words[1]);

答案 5 :(得分:0)

我认为这是从锚点获取文本的最简单方法之一。

WebElement link  = driver.findElement(By.partialLinkText("ZZ"));
System.out.println(link.getText());

答案 6 :(得分:0)

该问题的确切解决方案将是:

如前所述,您想在-

之后获得数字

为此,您可以使用xpath中可用的start-with来匹配起始文本。

 List<WebElement> elements = driver.findElements(By.xpath("//a[starts-with(text(),'ZZ-')]")); 
  for (int i = 0; i < elements.size(); i++) {
   System.out.println(elements.get(i).getAttribute("href")));  

@Gupta的答案是不错的技巧。 IMO,这不是硒的正确解决方案。