From e39e4f9ecb1998d379330b1bc08a9818e9202323 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sun, 2 Dec 2018 11:36:16 +0100 Subject: behavior: Improve click testing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some pages require scrolling, so we need a SinglePageController. Also mark network-dependent tests with xfail, so they won’t affect the overall test result unless you know what you’re doing (--runxfail). --- crocoite/test_behavior.py | 54 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 17 deletions(-) (limited to 'crocoite/test_behavior.py') diff --git a/crocoite/test_behavior.py b/crocoite/test_behavior.py index 03e151c..280b35b 100644 --- a/crocoite/test_behavior.py +++ b/crocoite/test_behavior.py @@ -20,12 +20,14 @@ import asyncio, os, yaml, re from urllib.parse import urlparse +from functools import partial import pytest import pkg_resources -from .browser import Item, SiteLoader, VarChangeEvent -from .logger import Logger, Consumer +from .logger import Logger from .devtools import Process +from .behavior import Scroll, Behavior +from .controller import SinglePageController with pkg_resources.resource_stream (__name__, os.path.join ('data', 'click.yaml')) as fd: sites = list (yaml.load_all (fd)) @@ -35,27 +37,28 @@ for o in sites: for u in s.get ('urls', []): clickParam.append ((u, s['selector'])) -@pytest.mark.parametrize("url,selector", clickParam) -@pytest.mark.asyncio -async def test_click_selectors (url, selector): +class ClickTester (Behavior): """ - Make sure the CSS selector exists on an example url + Test adapter checking a given selector exists after loading the page """ - logger = Logger () - async with Process () as browser, SiteLoader (browser, url, logger) as l: - tab = l.tab - await l.start () - # XXX: not sure why this is needed, must be a bug. - await asyncio.sleep (0.5) - if not l.idle.get (): - await l.idle.wait () + + __slots__ = ('selector', ) + + name = 'testclick' + + def __init__ (self, loader, logger, selector): + super ().__init__ (loader, logger) + self.selector = selector + + async def onfinish (self): + tab = self.loader.tab results = await tab.DOM.getDocument () rootNode = results['root']['nodeId'] - results = await tab.DOM.querySelectorAll (nodeId=rootNode, selector=selector) - assert results['nodeIds'], selector + results = await tab.DOM.querySelectorAll (nodeId=rootNode, selector=self.selector) + assert results['nodeIds'], self.selector # XXX: this is not true for every element we click. Github uses