コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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"]
コード例 #4
0
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"))