我在提取完整样式属性时遇到问题,因为它的一部分仍未到达DOM-它的图像有时需要1-2秒才能加载到屏幕中,所以发生的是具有属性的字符串,但是当图像从服务器到达时它会更改。 我正在执行WebDriverWait,以使该元素在DOM中可见,但是当我尝试采用其“样式”属性时(该属性具有“ ...;(url:“ http:// ....”)) ”,有时它不存在,然后我的substring()失败。
代码如下:
@Step("Print Image src url")
public String printImage(Integer imgNo){
WebElement imgStyle = (new WebDriverWait(driver, 15)).until(ExpectedConditions.visibilityOfElementLocated(By.xpath(Consts.ACTIVE_IMG_XPATH_1000 + "/div[" + (currentImg + 1) +"]/div[1]")));
String styleString = imgStyle.getAttribute("style");
Integer idxUrl = styleString.indexOf("url");
Integer idxJpg = styleString.indexOf("jpg");
String urlImage = styleString.substring(idxUrl+5,idxJpg+3); //styleString.indexOf("http"),20
Log.info("V - Image " + imgNo + " src is: " + urlImage);
return urlImage;
}
我可以简单地添加System.wait(3000),但是我不想使用它。任何想法如何更好地解决它?我可以等待String的可见性吗?
感谢您的时间。
答案 0 :(得分:1)
HTML是什么样的?您可以在动态且变化的部分之前使用contains
或starts-with
和url的开头。像WebDriverWait(driver, 15).until(EC.visibility_of_element_located(By.XPATH, "//div[contains(@style, 'text']"))