diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..41592153 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM python:3.11 + +# Install dependencies +RUN apt-get update && apt-get install -y \ + curl \ + wget \ + gnupg \ + && rm -rf /var/lib/apt/lists/* + +# Install Playwright +RUN pip install playwright + +# Set up Playwright dependencies for Chromium, Firefox and Webkit +RUN playwright install + +CMD ["/bin/bash"] diff --git a/compose.yml b/compose.yml new file mode 100644 index 00000000..f868ca89 --- /dev/null +++ b/compose.yml @@ -0,0 +1,33 @@ +version: '2' + +volumes: + nextcloud: + db: + +services: + db: + image: mariadb:10.6 + restart: always + command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW + volumes: + - db:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=TheGibson + - MYSQL_PASSWORD=TheGibson + - MYSQL_DATABASE=nextcloud + - MYSQL_USER=nextcloud + + app: + image: nextcloud:26.0.1 + restart: always + ports: + - 8080:80 + links: + - db + volumes: + - nextcloud:/var/www/html + environment: + - MYSQL_PASSWORD=TheGibson + - MYSQL_DATABASE=nextcloud + - MYSQL_USER=nextcloud + - MYSQL_HOST=db \ No newline at end of file diff --git a/nextcloud_create_event_playwright.py b/nextcloud_create_event_playwright.py new file mode 100644 index 00000000..9aaa55a1 --- /dev/null +++ b/nextcloud_create_event_playwright.py @@ -0,0 +1,64 @@ +import asyncio +import time +from playwright.async_api import async_playwright + +async def main(): + async with async_playwright() as playwright: + browser_type = playwright.chromium + browser = await browser_type.launch(headless=True, args=["--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage"]) + page = await browser.new_page() + # await page.set_default_timeout(60_000) # milliseconds + await page.goto('http://app/login') + + # 1. Login + user_element = await page.wait_for_selector('//*[@data-login-form-input-user]') + await user_element.type('Crash') + pass_element = await page.wait_for_selector('//*[@data-login-form-input-password]') + await pass_element.type('Override') + await page.click('.button-vue--vue-primary') + print(time.time(), "Login clicked") + + # Handle unsupported browsers warning + unsupported_element = await page.wait_for_selector('.content-unsupported-browser__continue') + if unsupported_element: + await unsupported_element.click() + print(time.time(), "Unsupported browsers warning clicked") + + await page.wait_for_navigation(wait_until='domcontentloaded', url='http://app/apps/dashboard/') + + # Wait for the modal to load and close + await asyncio.sleep(3) + + # 2. Close Modal + modal_close = await page.wait_for_selector('.modal-container__close') + await modal_close.click() + print(time.time(), "Intro video modal clicked") + + # Wait for the modal animation to complete + await asyncio.sleep(3) + + # 3. Go to Cal + await page.click('a[href="/apps/calendar/"]') + print(time.time(), "Calendar clicked") + + # 4. Open New Event Box + new_event_selector = await page.wait_for_selector('.new-event') + await new_event_selector.click() + print(time.time(), "New event clicked") + + # 4. Create Event + title_selector = await page.wait_for_selector('input[placeholder="Event title"]') + await title_selector.type('NYC2600 Meeting') + save_selector = await page.wait_for_selector('text=Save') + await save_selector.click() + print(time.time(), "Save event clicked") + + # 5. Wait for the event + await page.wait_for_selector('text=NYC2600 Meeting') + print(time.time(), "Event found! Fin") + + await browser.close() + + +if __name__ == '__main__': + asyncio.run(main()) diff --git a/nextcloud_install_playwright.py b/nextcloud_install_playwright.py new file mode 100644 index 00000000..ca265ab9 --- /dev/null +++ b/nextcloud_install_playwright.py @@ -0,0 +1,36 @@ +from playwright.async_api import async_playwright +from time import time + +async def main(): + async with async_playwright() as playwright: + browser_type = playwright.chromium + browser = await browser_type.launch( + headless=True, + args=["--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage"] + ) + page = await browser.new_page() + # await page.set_default_timeout(60_000) # milliseconds + await page.goto('http://app/') + + # 1. Create User + await page.type('#adminlogin', 'Crash') + await page.type('#adminpass', 'Override') + await page.click('.primary') + print(time(), "Create user clicked") + + # 2. Install all Apps + install_selector = '.button-vue--vue-primary' + await page.wait_for_selector(install_selector) + await page.click(install_selector) + print(time(), "Install apps clicked") + + # 3. Dashboard + await page.wait_for_selector('.app-dashboard') + print(time(), "Dashboard found") + + await browser.close() + + +if __name__ == '__main__': + import asyncio + asyncio.run(main())