硒如何知道一个元素是否具有href链接,如果不继续测试

时间:2019-02-11 10:17:50

标签: java selenium

我正在使用硒java 3.141.59和testng 6.14.3。
测试页可能显示为

if let locationIndex = blueMarkArray.firstIndex(of: self.atPoint(locationUser)) {
   let location = blueMarkArray[locationIndex]
   someNode.position = location.position
}

<tbody>
  <tr>
    <td class="S_line1">
      <strong class="W_f12">82</strong>
      <span class="S_txt2">fans</span>
    </td>
  </tr>
</tbody>

如果“粉丝”具有href链接,那么我将单击“粉丝”链接。如果没有,我将跳过此步骤并继续执行其他操作。
ExpectedConditions.presenceOfElementLocated在这种情况下不可用,因为当找不到href链接并停止测试时,它将引发误解。

3 个答案:

答案 0 :(得分:2)

要检查节点href是否存在,可以使用下面的XPath来标识a节点,因为href存在于a(I' m假设该类在这里是唯一的,如果不是,则使用其他定位符,并在末尾附加//a

String xpath = "//td[@class=\"S_line1\"]/a"

您可以像下面这样检查它的存在:

List<WebElement> hrefs = driver.findElements(By.xpath(xpath));
if(hrefs.size() > 0) {
    System.out.println("=> The href is present...");
    hrefs.get(0).click();
} else {
    System.out.println("=> The href is not present...");
}

如果href不存在,则以上代码不会引发任何错误。因此,您无需在那里处理任何异常。

希望对您有帮助...

答案 1 :(得分:1)

以下代码首先找到表中的所有<a>标签,如果标签中有href,则一个接一个地单击它们:

List<WebElement> allAnchorElements = driver.findElements(By.xpath("//table//td[@class='S_line1']/a"));

for(WebElement currElem : allAnchorElements ){

     if(currElem.getAttribute("href")){

           currElem.click();
     }

}

答案 2 :(得分:0)

您仅在寻找具有fans ...的href元素。

我能想到的最好方法是使用By.linkText()

在您的情况下:

try{
    WebElement link  = driver.findElement(By.linkText("fans"));
    System.out.println(link.getAttribute("href"));
    link.click();
    }
catch(NoSuchElementException e){
        System.out.println(e);
    }

希望这对您有帮助!