diff --git a/nvchecker_source/htmlparser.py b/nvchecker_source/htmlparser.py index 077f1e0..104d511 100644 --- a/nvchecker_source/htmlparser.py +++ b/nvchecker_source/htmlparser.py @@ -25,10 +25,17 @@ async def get_version_impl(info): doc = html.fromstring(res.body, base_url=conf['url'], parser=parser) try: - version = doc.xpath(conf.get('xpath')) + els = doc.xpath(conf.get('xpath')) except ValueError: if not conf.get('missing_ok', False): raise GetVersionError('version string not found.') except etree.XPathEvalError as e: raise GetVersionError('bad xpath', exc_info=e) + + version = [ + str(el) + if isinstance(el, str) + else str(el.text_content()) + for el in els + ] return version diff --git a/tests/test_htmlpasrer.py b/tests/test_htmlpasrer.py index f3be52b..436c27b 100644 --- a/tests/test_htmlpasrer.py +++ b/tests/test_htmlpasrer.py @@ -19,3 +19,11 @@ async def test_xpath_missing_ok(get_version): "xpath": '//pre[@class="test-is-ok"]/text()', "missing_ok": True, }) is None + +async def test_xpath_element(get_version): + assert await get_version("unifiedremote", { + "source": "htmlparser", + "url": "http://httpbin.org/", + "xpath": '//pre[@class="version"]', + }) != None +