def test_check_cursor_position()

in issues/314/user_tool.py [0:0]


def test_check_cursor_position():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True, args=["--ignore-certificate-errors", "--disable-web-security", "--disable-features=IsolateOrigins,site-per-process"])
        context = browser.new_context()

        context.tracing.start(screenshots=True, snapshots=True, sources=True)
        page = context.new_page()
        error = None
        try:
            user_email = "ibukunsamuel999+1733126918@gmail.com"
            login_user(page, user_email, first_name="Milan", last_name="T")


            page.get_by_role("textbox").fill("Hello @applausetester+mn03@applause.expensifail.com")
            time.sleep(1)


            page.get_by_role("paragraph").get_by_text("Hello").click()
            time.sleep(1)

            start_position = page.evaluate('''() => {
                const selection = window.getSelection();
                if (selection.rangeCount > 0) {
                    const range = selection.getRangeAt(0);
                    return range.startOffset;
                }
                return null;
            }''')


            for _ in range(5):  # Moving cursor 5 steps to the right to reach the '@'
                page.get_by_role("textbox").press("ArrowRight")
            at_position = page.evaluate('''() => {
                const selection = window.getSelection();
                if (selection.rangeCount > 0) {
                    const range = selection.getRangeAt(0);
                    return range.startOffset;
                }
                return null;
            }''')


            for _ in range(5):  # Moving cursor 5 steps to the left back to the start position
                page.get_by_role("textbox").press("ArrowLeft")
            final_position = page.evaluate('''() => {
                const selection = window.getSelection();
                if (selection.rangeCount > 0) {
                    const range = selection.getRangeAt(0);
                    return range.startOffset;
                }
                return null;
            }''')
            

            assert  final_position == start_position, f"Cursor did not move after the @: start {start_position}, @ position {at_position}, final {final_position}"

            time.sleep(2)
        except Exception as e:
            error = e
        finally:

            context.tracing.stop(path="/app/expensify/user_tool/output_browser1.zip")
            trace_cleaner("/app/expensify/user_tool/output_browser1.zip")
            browser.close()
        if error:
            raise error