1

我需要检查所有图像的网页,并使用 selenium webdriver 获取它们的属性,如 src 和 width 等。有人可以帮我吗?

4

2 回答 2

4

我会给你一些想法:

第一个我会从findElements返回所有元素的方法开始:

 List<WebElement> allImages = driver.findElements(By.ByTagName("img"));
 List<String> widthofImage = new ArrayList<String>;
 List<String> heighthOfImage = new ArrayList<String>;

然后你将不得不遍历列表

 for (WebElement imageFromList: allImages){
   widthOfImage.add(imageFromList.getAttribute("width"));
   heighthOfImage.add(imageFromList.getAttribute("height"));
   //.. etc

 }

然后您将这些值存储起来:) 然后您可以使用与上述相同的方式遍历它们...

注意我是从头顶写的。所以请仔细检查代码

顺便说一句,该driver变量被假定为健康且有生命的实例WebDriver

于 2013-04-23T13:49:55.530 回答
1

通过标签查找元素并获取其属性

正如 Pavel Janicek 所说,您必须找到与标签“img”匹配的所有 WebElement。但是我经常创建抽象 WebElement 对象的对象(这可能是也可能不是一件好事)。

例如,以下对象可以将 Image 抽象为一种 WebElement(如果您愿意,可以扩展 WebElement):

public class BasicElement {
    protected WebElement element;

    public BasicElement(WebElement element) {
        this.element = element;
    }
}

public class Image extends BasicElement {

    private String width;
    private String height;
    private String src;

    public Image(WebElement element) {
        super(element);

        assignWidth();
        assignHeight();
        assignHeight();
    }


    private void assignWidth() {
        width = element.getAttribute("width");
    }

    private void assignHeight() {
        height = element.getAttribute("height");
    }

    private void assignSrc() {
        src = element.getAttribute("src");
    }

    // various getters, setters and image related functionality

}

然后您将遍历 WebElements 作为 Image 对象并分配它们的属性,如下所示:

List<Image> images;
List<WebElement> imageElements = driver.findElements(By.ByTagName("img"));
for (WebElement imageElement : imageElements) {
    images.add(new Image(imageElement));
}

如果您扩展 WebElement,这可能会缩短。

确定元素的可见性

如果你想知道一个元素是否可见,那么我建议你实现一个等待:

public WebElement waitForElementVisible(WebDriver driver, final By selector, int timeOutInSeconds) {
    WebElement element;
    try{
        WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
        element = wait.until(ExpectedConditions.visibilityOfElementLocated(selector));

        return element;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

或者,如果您想知道元素是否存在:

public static WebElement waitForElementPresent(WebDriver driver, final By selector, int timeOutInSeconds) {
    WebElement element;
    try{
        WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
        element = wait.until(ExpectedConditions.presenceOfElementLocated(selector));

        return element;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
于 2013-04-24T04:04:17.593 回答