def element_html(driver, elements): """Return source of a particular HTML element on the page. :param driver: webdriver or marionette object - the object you use to drive your webdriver or marionette tests. :param elements: Webdriver.remote.webelement.WebElement object or marionette.marionette.HTMLElement object or a list of WebElement or HTMLElement objects :returns: string or list of strings of HTML element's source """ try: from selenium.webdriver.remote.webelement import WebElement except: from marionette.marionette import HTMLElement # just make this any type/class that is irrelevant WebElement = str finally: if locals().get('HTMLElement', None) is None: # just make this any type/class that is irrelevant HTMLElement = str def get_source(element): return driver.execute_script("return arguments[0].innerHTML;", element) ret_val = None if isinstance(elements, list): ret_val = [] for el in elements: ret_val.append(get_source(el)) elif isinstance(elements, WebElement) or isinstance(elements, HTMLElement): if HTMLElement != str: elements = [elements] ret_val = get_source(elements) else: raise Exception("Provide a webdriver's WebElement/marionette's " "HTMLElement or a list of those objects.") return ret_val