Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=429, reason=Too Many Requests headers={'date': 'Fri, 26 Jun 2026 19:00:40 GMT', 'server': 'uvicorn', 'content-length': '74', 'content-type': 'application/json'} body={"detail":"Too many authentication attempts, try again later. IP lockout"} ${resp} = <Response [429]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 45 seconds. 45s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Fri, 26 Jun 2026 19:01:25 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Create Anonymous Session AND Setup Master Password Executes all the given keywords in a sequence. Starting Browser process /home/lukas/miniconda3/lib/python3.13/site-packages/Browser/wrapper/index.js using at 127.0.0.1:40597 Successfully initialized new page object and opened url: http://127.0.0.1:8765/login No browser and context was open. New browser and context was automatically opened when page is created. ${BASE_URL}${path} BrowserControl Setter Open a new Page. /login Open a new page at the given path relative to BASE_URL. Title: 'AniWorld Manager - Login' ${title} = AniWorld Manager - Login ${title} Assertion Getter PageContent Returns the title of the current page. ${title} ${text} Fails if ``container`` does not contain ``item`` one or more times. Login Assert that the page title contains the given text. Waited for Element with selector id=password-input at state visible ${selector} visible timeout=5s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. id=password-input Assert that the element matching the selector is visible. Waited for Element with selector id=login-submit-btn at state visible ${selector} visible timeout=5s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. id=login-submit-btn Assert that the element matching the selector is visible. Waited for Element with selector id=password-toggle at state visible ${selector} visible timeout=5s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. id=password-toggle Assert that the element matching the selector is visible. Closed all browsers ALL BrowserControl Setter Closes the current browser. Close all browser contexts and the browser itself. Verify the login page loads with all form elements. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Fri, 26 Jun 2026 19:01:26 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Create Anonymous Session AND Setup Master Password Executes all the given keywords in a sequence. Successfully initialized new page object and opened url: http://127.0.0.1:8765/login No browser and context was open. New browser and context was automatically opened when page is created. ${BASE_URL}${path} BrowserControl Setter Open a new Page. /login Open a new page at the given path relative to BASE_URL. Fills the text 'TestPass123!' in the given field. id=password-input ${password} PageContent Setter Clears and fills the given ``txt`` into the text field found by ``selector``. Clicks the element 'id=login-submit-btn'. id=login-submit-btn PageContent Setter Simulates mouse click on the element found by ``selector``. Waited for Element with selector id=search-input at state visible id=search-input visible timeout=5s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. ${SETUP_PASSWORD} Fill the login form and submit it. Title: 'AniWorld Manager' ${title} = AniWorld Manager ${title} Assertion Getter PageContent Returns the title of the current page. ${title} ${text} Fails if ``container`` does not contain ``item`` one or more times. AniWorld Assert that the page title contains the given text. Waited for Element with selector id=search-input at state visible ${selector} visible timeout=5s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. id=search-input Assert that the element matching the selector is visible. Closed all browsers ALL BrowserControl Setter Closes the current browser. Close all browser contexts and the browser itself. Log in with the correct password and verify redirect to dashboard. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Fri, 26 Jun 2026 19:01:28 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Create Anonymous Session AND Setup Master Password Executes all the given keywords in a sequence. Successfully initialized new page object and opened url: http://127.0.0.1:8765/login No browser and context was open. New browser and context was automatically opened when page is created. ${BASE_URL}${path} BrowserControl Setter Open a new Page. /login Open a new page at the given path relative to BASE_URL. Fills the text 'WrongPass123!' in the given field. id=password-input WrongPass123! PageContent Setter Clears and fills the given ``txt`` into the text field found by ``selector``. Clicks the element 'id=login-submit-btn'. id=login-submit-btn PageContent Setter Simulates mouse click on the element found by ``selector``. Waited for Element with selector id=login-error at state visible ${selector} visible timeout=5s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. id=login-error Assert that the element matching the selector is visible. Text: ['invalid credentials'] ${element_text} = invalid credentials ${element_text} ${selector} Assertion Getter PageContent Returns text attribute of the element found by ``selector``. ${element_text} ${text} Fails if ``container`` does not contain ``item`` one or more times. id=login-error invalid Assert that the element's text contains the given substring. Closed all browsers ALL BrowserControl Setter Closes the current browser. Close all browser contexts and the browser itself. Log in with an incorrect password and verify error message. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Fri, 26 Jun 2026 19:01:28 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Create Anonymous Session AND Setup Master Password Executes all the given keywords in a sequence. Successfully initialized new page object and opened url: http://127.0.0.1:8765/login No browser and context was open. New browser and context was automatically opened when page is created. ${BASE_URL}${path} BrowserControl Setter Open a new Page. /login Open a new page at the given path relative to BASE_URL. Fills the text 'WrongPass123!' in the given field. id=password-input WrongPass123! PageContent Setter Clears and fills the given ``txt`` into the text field found by ``selector``. Clicks the element 'id=login-submit-btn'. id=login-submit-btn PageContent Setter Simulates mouse click on the element found by ``selector``. Waited for Element with selector id=login-error at state visible id=login-error visible timeout=3s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. 0 Fills the text 'WrongPass123!' in the given field. id=password-input WrongPass123! PageContent Setter Clears and fills the given ``txt`` into the text field found by ``selector``. Clicks the element 'id=login-submit-btn'. id=login-submit-btn PageContent Setter Simulates mouse click on the element found by ``selector``. Waited for Element with selector id=login-error at state visible id=login-error visible timeout=3s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. 1 Fills the text 'WrongPass123!' in the given field. id=password-input WrongPass123! PageContent Setter Clears and fills the given ``txt`` into the text field found by ``selector``. Clicks the element 'id=login-submit-btn'. id=login-submit-btn PageContent Setter Simulates mouse click on the element found by ``selector``. Waited for Element with selector id=login-error at state visible id=login-error visible timeout=3s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. 2 Fills the text 'WrongPass123!' in the given field. id=password-input WrongPass123! PageContent Setter Clears and fills the given ``txt`` into the text field found by ``selector``. Clicks the element 'id=login-submit-btn'. id=login-submit-btn PageContent Setter Simulates mouse click on the element found by ``selector``. Waited for Element with selector id=login-error at state visible id=login-error visible timeout=3s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. 3 Fills the text 'WrongPass123!' in the given field. id=password-input WrongPass123! PageContent Setter Clears and fills the given ``txt`` into the text field found by ``selector``. Clicks the element 'id=login-submit-btn'. id=login-submit-btn PageContent Setter Simulates mouse click on the element found by ``selector``. Waited for Element with selector id=login-error at state visible id=login-error visible timeout=3s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. 4 Fills the text 'WrongPass123!' in the given field. id=password-input WrongPass123! PageContent Setter Clears and fills the given ``txt`` into the text field found by ``selector``. Clicks the element 'id=login-submit-btn'. id=login-submit-btn PageContent Setter Simulates mouse click on the element found by ``selector``. Waited for Element with selector id=login-error at state visible id=login-error visible timeout=3s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. 5 ${i} 6 Text: ['Too many authentication attempts, try again later. IP lockout'] ${element_text} = Too many authentication attempts, try again later. IP lockout ${element_text} ${selector} Assertion Getter PageContent Returns text attribute of the element found by ``selector``. ${element_text} ${text} Fails if ``container`` does not contain ``item`` one or more times. id=login-error lockout Assert that the element's text contains the given substring. Closed all browsers ALL BrowserControl Setter Closes the current browser. Close all browser contexts and the browser itself. Submit multiple failed logins and verify lockout message appears. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=429, reason=Too Many Requests headers={'date': 'Fri, 26 Jun 2026 19:01:30 GMT', 'server': 'uvicorn', 'content-length': '74', 'content-type': 'application/json'} body={"detail":"Too many authentication attempts, try again later. IP lockout"} ${resp} = <Response [429]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 45 seconds. 45s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=429, reason=Too Many Requests headers={'date': 'Fri, 26 Jun 2026 19:02:15 GMT', 'server': 'uvicorn', 'content-length': '74', 'content-type': 'application/json'} body={"detail":"Too many authentication attempts, try again later. IP lockout"} ${resp} = <Response [429]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 45 seconds. 45s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Fri, 26 Jun 2026 19:03:00 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Create Anonymous Session AND Setup Master Password Executes all the given keywords in a sequence. Successfully initialized new page object and opened url: http://127.0.0.1:8765/login No browser and context was open. New browser and context was automatically opened when page is created. ${BASE_URL}${path} BrowserControl Setter Open a new Page. /login Open a new page at the given path relative to BASE_URL. Fills the text 'TestPass123!' in the given field. id=password-input ${SETUP_PASSWORD} PageContent Setter Clears and fills the given ``txt`` into the text field found by ``selector``. Attribute is: 'password' ${type_before} = password ${type_before} id=password-input type Assertion Getter PageContent Returns the HTML ``attribute`` of the element found by ``selector``. ${type_before} password Fails if objects are unequal after converting them to strings. Clicks the element 'id=password-toggle'. id=password-toggle PageContent Setter Simulates mouse click on the element found by ``selector``. Attribute is: 'text' ${type_after} = text ${type_after} id=password-input type Assertion Getter PageContent Returns the HTML ``attribute`` of the element found by ``selector``. ${type_after} text Fails if objects are unequal after converting them to strings. Clicks the element 'id=password-toggle'. id=password-toggle PageContent Setter Simulates mouse click on the element found by ``selector``. Attribute is: 'password' ${type_final} = password ${type_final} id=password-input type Assertion Getter PageContent Returns the HTML ``attribute`` of the element found by ``selector``. ${type_final} password Fails if objects are unequal after converting them to strings. Closed all browsers ALL BrowserControl Setter Closes the current browser. Close all browser contexts and the browser itself. Click the eye icon and verify the password field type toggles. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Fri, 26 Jun 2026 19:03:00 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Create Anonymous Session AND Setup Master Password Executes all the given keywords in a sequence. Successfully initialized new page object and opened url: http://127.0.0.1:8765/login No browser and context was open. New browser and context was automatically opened when page is created. ${BASE_URL}${path} BrowserControl Setter Open a new Page. /login Open a new page at the given path relative to BASE_URL. Fills the text 'TestPass123!' in the given field. id=password-input ${password} PageContent Setter Clears and fills the given ``txt`` into the text field found by ``selector``. Clicks the element 'id=login-submit-btn'. id=login-submit-btn PageContent Setter Simulates mouse click on the element found by ``selector``. </td></tr><tr><td colspan="3"><a href="browser/screenshot/fail-screenshot-1.png" target="_blank"><img src="browser/screenshot/fail-screenshot-1.png" width="800px"/></a> See also file:///home/lukas/Volume/repo/Aniworld/robot_output/playwright-log.txt for additional details. TimeoutError: locator.waitFor: Timeout 5000ms exceeded. Call log: - waiting for locator('id=search-input') to be visible id=search-input visible timeout=5s PageContent Wait Waits for the element found by ``selector`` to satisfy state option. TimeoutError: locator.waitFor: Timeout 5000ms exceeded. Call log: - waiting for locator('id=search-input') to be visible ${SETUP_PASSWORD} Fill the login form and submit it. TimeoutError: locator.waitFor: Timeout 5000ms exceeded. Call log: - waiting for locator('id=search-input') to be visible Click the logout button and wait for redirect to login. Login Assert that the page title contains the given text. id=password-input Assert that the element matching the selector is visible. Closed all browsers ALL BrowserControl Setter Closes the current browser. Close all browser contexts and the browser itself. Log in then log out and verify redirect to login page. TimeoutError: locator.waitFor: Timeout 5000ms exceeded. Call log: - waiting for locator('id=search-input') to be visible Login UI tests for Aniworld. Covers login page load, valid/invalid login, rate limit UI, password visibility, and logout. All Tests Login