ความแตกต่างระหว่างการตรวจสอบว่ารูปภาพแสดงและโหลดบนหน้าเว็บหรือไม่

ฉันถูกขอให้ตรวจสอบว่ามีการโหลดภาพพื้นหลังไปยังหน้าเว็บหรือไม่ แต่ฉันไม่เข้าใจความแตกต่างระหว่างรูปภาพที่กำลังโหลดกับที่แสดง มีไหม? หากเป็นเช่นนั้น หนึ่งโค้ดสำหรับการทดสอบนี้ในซีลีเนียมจาวาจะเป็นอย่างไร

ด้านล่างนี้คือโค้ดที่ฉันพยายามยืนยัน ขั้นแรกด้วยการตรวจสอบว่า URL มีไฟล์ที่ฉันคาดหวัง จากนั้นส่วนที่ฉันไม่รู้วิธีตรวจสอบ โดยตรวจสอบว่าไฟล์ถูกโหลดบนหน้าเว็บหรือไม่

รหัส:

<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>

ยืนยัน 1:

assertTrue(thePageFactory.getAudHomePage(this).WeatherTopNavContainer.findElement(By.xpath("div[1]")).getAttribute("style").contains("/resources/defaults/news_3.0/icons/weather/wi-67.svg"),"File does not match for widget #1");

ยืนยัน 2:

?


person Rainier    schedule 26.10.2018    source แหล่งที่มา


คำตอบ (3)


ตรวจสอบเส้นทาง URL เพียงอย่างเดียวจะไม่พบปัญหารูปภาพไม่โหลด หากไม่สามารถเข้าถึงรูปภาพหรือรูปภาพไม่มีอยู่ในเซิร์ฟเวอร์ สิ่งนี้จะไม่ล้มเหลวในกรณีเหล่านั้น

หากเป็นแท็กรูปภาพ เราสามารถตรวจสอบความสูงของมันเพื่อตรวจสอบว่าโหลดแล้วหรือไม่ เนื่องจากเป็นภาพพื้นหลัง เราจึงไม่สามารถใช้เกณฑ์ดังกล่าวได้ที่นี่เช่นกัน

แต่เมื่อใช้จาวาสคริปต์ คุณจะสามารถตรวจสอบได้ว่า URL รูปภาพกำลังโหลดรูปภาพหรือไม่ สิ่งนี้จะทำให้คุณมั่นใจเพิ่มเติมว่ารูปภาพของคุณถูกโหลดแล้ว

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"))
person Navarasu    schedule 26.10.2018

เพื่อตรวจสอบว่ารูปภาพถูกโหลดหรือไม่ใช้โค้ดด้านล่าง

มันจะตรวจสอบสถานะ HTTP ของ URL ใด ๆ

คุณสามารถระบุ URL ที่กำหนดในคุณสมบัติสไตล์ภาพพื้นหลังหรือ URL ที่ระบุในแอตทริบิวต์ href ของแท็ก IMG

HttpClient client = new DefaultHttpClient();
HttpGet request1 = new HttpGet("provide-url-here");
HttpResponse response1 = client.execute(request1);
int code = response1.getStatusLine().getStatusCode();

หากสถานะ HTTP (ค่าของรหัสตัวแปรในข้อมูลโค้ดด้านบน) คือ 2×× (ในกรณีส่วนใหญ่คือ 200) นั่นหมายความว่า URL ทำงานได้ดีและโหลดรูปภาพได้อย่างถูกต้อง

person Mitul Lakhani    schedule 27.10.2018

หยาบ มีความแตกต่างระหว่างสองสถานะของภาพที่ โหลด และ แสดง

จริงๆ แล้ว ไม่ใช่รูปภาพเพียงอย่างเดียว แต่เป็นทั้ง หน้าเว็บ (เช่น Page Object) ที่ถูกโหลด

คุณสามารถดูการสนทนาโดยละเอียดที่เกี่ยวข้องได้ใน เรามีฟังก์ชั่นทั่วไปในการตรวจสอบว่าเพจโหลดใน 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]")));
person DebanjanB    schedule 27.10.2018