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