我需要检查所有图像的网页,并使用 selenium webdriver 获取它们的属性,如 src 和 width 等。有人可以帮我吗?
问问题
18956 次
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 回答