У меня есть специально созданный класс, который я создал для очень похожей цели (в моем случае меня интересовали изменения свойства «value», но я изменил его, чтобы он соответствовал вашему примеру изменения «class»):
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
class WaitForAttrValueChange:
def __init__(self, locator, val_):
self.locator = locator
self.val = val_
def __call__(self, driver):
try:
attr_value = EC._find_element(driver, self.locator).get_property('className')
return attr_value.startswith(self.val)
except SE.StaleElementReferenceException:
return False
Затем вы можете использовать его с WebDriverWait
(очевидно, вы можете использовать любой By
метод идентификации вместо By.ID
, это всего лишь пример):
WebDriverWait(driver, 20).until(WaitForAttrValueChange((By.ID, 'id'), 'locked'))