我被要求验证是否将背景图像加载到网页上,但是我并不真正了解加载图像与显示图像之间的区别。在那儿?如果是这样,如何在Selenium Java中执行此测试的一个代码?
下面是我要声明的代码,首先检查url是否包含我期望的文件,然后检查我不知道如何验证的部分,检查文件是否已加载到网页上
代码:
@instance_options
断言1:
<div class="_1WvEu" style="background-image: url("/resources/defaults/news_3.0/icons/weather/wi-67.svg");"><p class="_1DlTY"> Now </p><p class="_1Q1wt _1L3iW">62</p></div>
断言2:
?
答案 0 :(得分:0)
仅验证URL路径就不会发现图像未加载的问题。如果图片不正确或服务器中没有图片,则在这种情况下不会失败。
如果它是图像标签,我们可以验证其高度以检查是否已加载。由于是背景图片,因此我们在这里也不能使用该标准。
但是使用javascript,您可以验证图片网址是否正在加载图片。这将为您提供加载图像的附加条件。
class image_loaded(object):
javascript= """var image = document.createElement('img');
image.src = getBgUrl(document.getElementById('test-bg'));
image.onload = function () {
return true
}; ."""
def __init__(self, locator):
self.url= url
def __call__(self, driver):
return driver.execute_async_script(javascript,)
wait = WebDriverWait(driver, 60)
# get extract the image url from the style attribute with string manipulation
element = wait.until(image_loaded("the image url present in background"))
答案 1 :(得分:0)
要验证是否已加载图像,请使用以下代码。
它将检查任何网址的HTTP状态。
您可以提供在background-image样式属性中给出的url或在IMG标签的href属性中给出的url
HttpClient client = new DefaultHttpClient();
HttpGet request1 = new HttpGet("provide-url-here");
HttpResponse response1 = client.execute(request1);
int code = response1.getStatusLine().getStatusCode();
如果HTTP Status(上述代码段中可变代码的值)为2××(在大多数情况下为200),则表示url工作正常且图像已正确加载
答案 2 :(得分:0)
粗略地来说,加载与显示的图像的两种状态之间存在差异。
实际上,加载的不仅仅是图像,而是整个网页(即 Page Object )。
您可以在Do we have any generic funtion to check if page has completely loaded in Selenium
中找到相关的详细讨论 isDisplayed()
方法验证元素是否显示。此方法避免了必须解析元素的style
属性的问题,并定义为:
boolean isDisplayed()
Is this element displayed or not? This method avoids the problem of having to parse an element's "style" attribute.
Returns:
Whether or not the element is displayed
根据HTML,该元素似乎是React元素,因此在声明之前,您需要按如下方式查找引发 WebDriverWait 的元素:
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("div[1]")));