1

对于https://www.parcelhero.com/en-gb/courier-services/carriers/dhl中的以下 html 代码,getattribute("style") 获取 null 值。为什么?

<div class="dvPageShare" style="position: relative; top: -50px;"> 

以下是使用的代码:

driver.get("https://www.parcelhero.com/en-gb/courier-services/carriers/dhl");
    List <WebElement>SocialLink = driver.findElements(By.tagName("div"));
        for (WebElement social : SocialLink)
 {
if( social.getAttribute("class")!=null && social.getAttribute("class").equals("dvPageShare"))
                {
System.out.println("Present");System.out.println(social.getAttribute("style"));
}

            }
4

2 回答 2

1

alecxe 使用了正确的方法,我只是稍微不同地编写代码。如果没有匹配的元素,则代码执行将通过循环。如果需要,您可以专门检查socialLinks.size() > 0...也许在这种情况下记录一条消息。您必须决定什么是最适合您的情况。

List<WebElement> socialLinks = driver.findElements(By.cssSelector("div.dvPageShare"));
for (WebElement socialLink : socialLinks)
{
    System.out.println("Present");
    System.out.println(socialLink.getAttribute("style"));
}

这个 CSS 选择器div.dvPageShare意味着找到一个DIV具有类 (.) dvPageShare 的。

我没有尝试运行您的代码,但我确实看到该页面上有两个DIVs class = "dvPageShare",其中一个没有样式属性。也许这就是它的null来源?

CSS 选择器参考。学习它们......它们非常强大,每个自动化者都应该理解和使用它们。

于 2015-08-26T18:03:13.897 回答
1

采用EAFP方法。按类名查找元素并处理异常:

try {
    WebElement social = driver.findElement(By.cssSelector("div.dvPageShare"));
    System.out.println("Present");
    System.out.println(social.getAttribute("style"));
} catch (NoSuchElementException ex) {
    System.out.println("Not Present");
}
于 2015-08-26T13:26:23.280 回答