验证图片是否显示与网页上加载之间有区别?

时间:2018-10-26 19:38:37

标签: java selenium selenium-webdriver webdriver webdriverwait

我被要求验证是否将背景图像加载到网页上,但是我并不真正了解加载图像与显示图像之间的区别。在那儿?如果是这样,如何在Selenium Java中执行此测试的一个代码?

下面是我要声明的代码,首先检查url是否包含我期望的文件,然后检查我不知道如何验证的部分,检查文件是否已加载到网页上

代码:

@instance_options

断言1:

<div class="_1WvEu" style="background-image: url(&quot;/resources/defaults/news_3.0/icons/weather/wi-67.svg&quot;);"><p class="_1DlTY"> Now </p><p class="_1Q1wt _1L3iW">62</p></div>

断言2:

3 个答案:

答案 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()

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]")));