Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Проверить что background-image загрузился на странице

python
selenium
javascript
webdriver
Теги: #<Tag:0x00007f7b6d1f15b8> #<Tag:0x00007f7b6d1f1428> #<Tag:0x00007f7b6d1f11d0> #<Tag:0x00007f7b6d1f0ff0>

#1

Нужно проверить что картинка отображается на странице.
Вот как выглядит код страницы:

<div class="myboard-background">
<div class="myboard-hero" style="background-image:url(https://myurl/cb4329e7a2d3adec617b1196056c221b75beceba.jpg);">

Автоматизация проэкта пишется на python + webdriver, но как я понял в данном случае нужно выполнять javascript.
Я пробовал

execute_script("return arguments[0].complete && typeof arguments[0].naturalWidth != \"undefined\" && arguments[0].naturalWidth > 0", ImageFile);

Этот метод работает только когда у меня есть image tag
А каким образом проверять когда тэга нет как в моем случае?

Проблема не в том чтобы получить атрибут элемента. проблема проверить, что картинка реально отображается на странице.

Проверки вида $(“img”).getAttribute(“src”).shouldHave(text(“pic_trulli.jpg”)) или что style содержит url пройдут успешно, даже если урл битый и картинка не загрузилась.


(Юрий Аксютин) #2

я работаю с C#, но точно знаю, что селениум объект WebElement обладает методом GetAttribute:

		/// <summary>
		/// Gets the value of the specified attribute for this element.
		/// </summary>
		/// <param name="attributeName">The name of the attribute.</param>
		/// <returns>The attribute's current value. Returns a <see langword="null" /> if the
		/// value is not set.</returns>
		/// <remarks>The <see cref="M:OpenQA.Selenium.IWebElement.GetAttribute(System.String)" /> method will return the current value
		/// of the attribute, even if the value has been modified after the page has been
		/// loaded. Note that the value of the following attributes will be returned even if
		/// there is no explicit attribute on the element:
		/// <list type="table"><listheader><term>Attribute name</term><term>Value returned if not explicitly specified</term><term>Valid element types</term></listheader><item><description>checked</description><description>checked</description><description>Check Box</description></item><item><description>selected</description><description>selected</description><description>Options in Select elements</description></item><item><description>disabled</description><description>disabled</description><description>Input and other UI elements</description></item></list></remarks>
		/// <exception cref="T:OpenQA.Selenium.StaleElementReferenceException">Thrown when the target element is no longer valid in the document DOM.</exception>
		string GetAttribute(string attributeName);

найдите как этот метод называется на pythonи, потом распарсите значение атрибута


(Maxim Zaitsev) #3
attr_value = driver.find_element_by_css_selector('.myboard-hero').get_attribute('style')

P.S. Проверять кроме картинок нечего что ли уже ?


(Борис Осипов) #4

проблема не в том чтобы получить атрибут элемента. проблема проверить, что картинка реально отображается на странице.

Проверки вида $(“img”).getAttribute(“src”).shouldHave(text(“pic_trulli.jpg”)) или что style содержит url пройдут успешно, даже если урл битый и картинка не загрузилась.


(Сергей Кузьмин) #5

не пробовали как то типа


@"
String imageReadyScript = 

var selector = arguments[0];
var nodes = element.parentNode.querySelectorAll(selector);
var element = nodes[0];

return element.complete && typeof element.naturalWidth != "undefined" && element.naturalWidth > 0
"
return execute_script(imageReadyScript , bodySelector /* "/body" ? */ );

(Сергей Кузьмин) #6

попробовал - не работает с body - что то типа

 DOMException: Failed to execute 'postMessage' on 'Window': HTMLBodyElement object could not be cloned.

#7

@osipov_boris Спасибо, да вы действительно правы, проблема проверить что картинка действительно загрузилась и отображена на странице