def test_by_selector(): class MockSource: @property def page(self): return self @property def page_source(self): return bs4.BeautifulSoup( """ <body wtl-uid="5"><div wtl-uid="1" class="hey"><a wtl-uid="2"></a></div> <div wtl-uid="3"><span wtl-uid="4"></span></div></body>""", "html5lib", ) actions = wtl.actions.Actions([ wtl.actions.Refresh(), wtl.actions.Click( wtl.PageElement(page=MockSource(), metadata={"wtl_uid": 1})), wtl.actions.FillText( wtl.PageElement(page=MockSource(), metadata={"wtl_uid": 3})), wtl.actions.Navigate(), ]) divs = actions.by_selector(wtl.Selector("div")) assert len(divs) == 2 divs = actions.by_selector(wtl.Selector(".hey")) assert len(divs) == 1 divs = actions.by_selector(wtl.Selector("#yo")) assert not divs
def test_by_score(): actions = wtl.actions.Actions( [ wtl.actions.Refresh(), wtl.actions.Click(wtl.PageElement(page=None, metadata={"x": 0.5})), wtl.actions.Click(wtl.PageElement(page=None, metadata={"x": 0.5, "y": 0.5})), wtl.actions.FillText(wtl.PageElement(page=None, metadata={"y": 0.75, "raw_scores": {"y": 2.5}})), wtl.actions.FillText(wtl.PageElement(page=None, metadata={"x": 1.5, "y": 1.5, "raw_scores": {"y": 1.5}})), wtl.actions.Navigate(), ] ) x_actions = actions.by_score("x") assert len(x_actions) == 3 a_actions = actions.by_score("a") assert not a_actions y_actions = actions.by_score("y", limit=1.0) assert len(y_actions) == 1 y_raw_actions = actions.by_raw_score("y", limit=1.0) assert len(y_raw_actions) == 2 b_actions = actions.by_raw_score("b") assert not b_actions
def test_by_score_and_uid(): elements = wtl.snapshot.Elements([ wtl.PageElement(page=None, metadata={ "wtl_uid": 1, "x": 0.5 }), wtl.PageElement(page=None, metadata={ "wtl_uid": 2, "x": 0.5, "y": 0.5 }), wtl.PageElement(page=None, metadata={ "y": 0.75, "raw_scores": { "y": 2.5 } }), wtl.PageElement(page=None, metadata={ "x": 1.5, "y": 1.5, "raw_scores": { "y": 1.5 } }), ]) x_elements = elements.by_score("x") assert len(x_elements) == 3 a_elements = elements.by_score("a") assert not a_elements y_elements = elements.by_score("y", limit=1.0) assert len(y_elements) == 1 y_raw_elements = elements.by_raw_score("y", limit=1.0) assert len(y_raw_elements) == 2 y_raw_elements_sorted = elements.by_raw_score("y").sort_by("y") assert len(y_raw_elements) == 2 assert y_raw_elements[0] == y_raw_elements_sorted[1] assert y_raw_elements[1] == y_raw_elements_sorted[0] xy_element = elements.by_uid(2) assert xy_element.metadata["x"] == xy_element.metadata["y"]
def test_by_selector(): class MockSource: @property def page(self): return self @property def page_source(self): return bs4.BeautifulSoup( """ <body wtl-uid="5"><div wtl-uid="1" class="hey"><a wtl-uid="2"></a><a wtl-uid="6"></a></div> <div wtl-uid="3"><span wtl-uid="4"></span></div></body>""", "html5lib", ) elements = wtl.snapshot.Elements([ wtl.PageElement(page=MockSource(), metadata={"wtl_uid": 1}), wtl.PageElement(page=MockSource(), metadata={"wtl_uid": 2}), wtl.PageElement(page=MockSource(), metadata={"wtl_uid": 3}), wtl.PageElement(page=MockSource(), metadata={"wtl_uid": 4}), wtl.PageElement(page=MockSource(), metadata={"wtl_uid": 6}), ]) divs = elements.by_selector(wtl.Selector("div")) assert len(divs) == 2 divs = elements.by_selector(wtl.Selector(".hey")) assert len(divs) == 1 links = elements.by_subtree(divs[0], include_root=False) assert len(links) == 2 links = elements.by_subtree(wtl.Selector(".hey"), include_root=True) assert len(links) == 3 with pytest.raises(AssertionError): elements.by_subtree(wtl.Selector("does-not-exist"))