在网络元素中查找动态样式属性

时间:2018-06-27 12:43:01

标签: java selenium selenium-webdriver webdriverwait

我在提取完整样式属性时遇到问题,因为它的一部分仍未到达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的可见性吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

HTML是什么样的?您可以在动态且变化的部分之前使用containsstarts-with和url的开头。像WebDriverWait(driver, 15).until(EC.visibility_of_element_located(By.XPATH, "//div[contains(@style, 'text']"))