Search element and wait until the requested attribute contains the expected value

        :param element: PageElement or element locator as a tuple (locator_type, locator_value) to be found
        :param attribute: attribute belonging to the element
        :param value: expected value for the attribute of the element
        :param timeout: max time to wait
        :returns: the web element if the element's attribute contains the expected value
        :rtype: selenium.webdriver.remote.webelement.WebElement or appium.webdriver.webelement.WebElement
        :raises TimeoutException: If the element's attribute does not contain the expected value after the timeout

def wait_until_element_attribute_is(self, element, attribute, value, timeout=None):
        """Search element and wait until the requested attribute contains the expected value

        :param element: PageElement or element locator as a tuple (locator_type, locator_value) to be found
        :param attribute: attribute belonging to the element
        :param value: expected value for the attribute of the element
        :param timeout: max time to wait
        :returns: the web element if the element's attribute contains the expected value
        :rtype: selenium.webdriver.remote.webelement.WebElement or appium.webdriver.webelement.WebElement
        :raises TimeoutException: If the element's attribute does not contain the expected value after the timeout
        """
        return self._wait_until(self._expected_condition_value_in_element_attribute, (element, attribute, value), timeout)