From 204e83b04d46dbfb6a80da0dfdafeb01afa14eee Mon Sep 17 00:00:00 2001 From: mcbarton <150042563+mcbarton@users.noreply.github.com> Date: Wed, 19 Nov 2025 19:39:59 +0000 Subject: [PATCH 01/66] Add download button using overrides.json file --- overrides.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 overrides.json diff --git a/overrides.json b/overrides.json new file mode 100644 index 00000000..6c67db51 --- /dev/null +++ b/overrides.json @@ -0,0 +1,14 @@ +{ + "@jupyterlab/notebook-extension:panel": { + "toolbar": [ + { + "name": "download", + "label": "Download", + "args": {}, + "command": "docmanager:download", + "icon": "ui-components:download", + "rank": 50 + } + ] + } +} From 0d78cb144c09ed2ee50fd96c7f0c229c4cdef6cb Mon Sep 17 00:00:00 2001 From: mcbarton <150042563+mcbarton@users.noreply.github.com> Date: Wed, 19 Nov 2025 19:41:41 +0000 Subject: [PATCH 02/66] Add Python which automatically runs smallpt.ipynb in chosen browser --- scripts/automated-notebook-run-script.py | 192 +++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 scripts/automated-notebook-run-script.py diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py new file mode 100644 index 00000000..5d72b0e7 --- /dev/null +++ b/scripts/automated-notebook-run-script.py @@ -0,0 +1,192 @@ +import argparse +from selenium import webdriver +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.common.action_chains import ActionChains +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +import time + + +def main(): + parser = argparse.ArgumentParser(description="Run Selenium with a chosen driver") + parser.add_argument( + "--driver", + type=str, + default="chrome", + choices=["chrome", "firefox", "safari"], + help="Choose which WebDriver to use", + ) + + args = parser.parse_args() + URL = "http://127.0.0.1:8000/lab/index.html?path=smallpt.ipynb" + + # This will start the right driver depending on what + # driver option is chosen + if args.driver == "chrome": + driver = webdriver.Chrome() + + elif args.driver == "firefox": + driver = webdriver.Firefox() + + elif args.driver == "safari": + driver = webdriver.Safari() + + wait = WebDriverWait(driver, 30) + actions = ActionChains(driver) + + # Open Jupyter Lite with the notebook requested + driver.get(URL) + + # Waiting for Jupyter Lite URL to finish loading + notebook_area = wait.until( + EC.presence_of_element_located((By.CSS_SELECTOR, ".jp-Notebook")) + ) + + time.sleep(1) + + notebook_area.click() + time.sleep(0.5) + + # This will run all the cells of the chosen notebook + if args.driver == "chrome": + print("Opening Run Menu") + run_menu = wait.until( + EC.element_to_be_clickable((By.XPATH, "//li[normalize-space()='Run']")) + ) + actions.move_to_element(run_menu).pause(0.1).click().perform() + time.sleep(0.5) + print("Click on Run All Cells") + run_all_menu = wait.until( + EC.visibility_of_element_located( + (By.XPATH, "//li[normalize-space()='Run All Cells']") + ) + ) + actions.move_to_element(run_all_menu).click().perform() + time.sleep(100) + + elif args.driver == "firefox": + print("Opening Run Menu") + run_menu = wait.until( + EC.element_to_be_clickable((By.XPATH, "//li[normalize-space()='Run']")) + ) + actions.move_to_element(run_menu).pause(0.1).click().perform() + time.sleep(0.5) + print("Click on Run All Cells") + run_all_menu = wait.until( + EC.element_to_be_clickable( + (By.XPATH, "//li[normalize-space()='Run All Cells']") + ) + ) + actions.move_to_element(run_all_menu).click().perform() + time.sleep(100) + + elif args.driver == "safari": + print("Running all cells using Shift+Enter...") + while True: + # Focused cell + focused_cell = driver.find_element( + By.CSS_SELECTOR, ".jp-Notebook-cell.jp-mod-selected" + ) + + # Get the cell content text reliably in Safari + editor_divs = focused_cell.find_elements( + By.CSS_SELECTOR, ".jp-InputArea-editor div" + ) + cell_content = "".join([div.text for div in editor_divs]).strip() + + if not cell_content: + break + + # Press Shift+Enter to run the cell + notebook_area.send_keys(Keys.SHIFT, Keys.ENTER) + time.sleep(0.5) + + time.sleep(145) + + if args.driver == "chrome" or args.driver == "firefox": + print("Saving notebook") + file_menu = wait.until( + EC.element_to_be_clickable((By.XPATH, "//li[normalize-space()='File']")) + ) + actions.move_to_element(file_menu).click().perform() + save_item = wait.until( + EC.visibility_of_element_located( + (By.XPATH, "//li[contains(normalize-space(), 'Save')]") + ) + ) + + actions.move_to_element(save_item).click().perform() + time.sleep(0.5) + + elif args.driver == "safari": + print("Saving notebook using command + s + enter.") + notebook_area.send_keys(Keys.COMMAND, "s") + time.sleep(0.5) + + notebook_area.send_keys(Keys.ENTER) + time.sleep(0.5) + + # This downloads the notebook, so it can be compared + # to a reference notebook + print("Downloading notebook by clicking download button") + search_script = """ + function deepQuerySelector(root, selector) { + const walker = document.createTreeWalker( + root, + NodeFilter.SHOW_ELEMENT, + { + acceptNode: node => NodeFilter.FILTER_ACCEPT + }, + false + ); + + while (walker.nextNode()) { + let node = walker.currentNode; + + // Check if this node matches + if (node.matches && node.matches(selector)) { + return node; + } + + // If this element has a shadow root, search inside it + if (node.shadowRoot) { + const found = deepQuerySelector(node.shadowRoot, selector); + if (found) return found; + } + } + return null; + } + + return deepQuerySelector(document, "jp-button[data-command='docmanager:download']"); + """ + + download_button = driver.execute_script(search_script) + + driver.execute_script( + """ + const el = arguments[0]; + + // Force element to be visible and focused + el.scrollIntoView({block: 'center', inline: 'center'}); + + // Dispatch real mouse events since Safari WebDriver ignores .click() on Web Components + ['pointerdown', 'mousedown', 'mouseup', 'click'].forEach(type => { + el.dispatchEvent(new MouseEvent(type, { + bubbles: true, + cancelable: true, + composed: true, // IMPORTANT for shadow DOM + view: window + })); + }); + """, + download_button, + ) + time.sleep(2) + + # Close browser + driver.quit() + + +if __name__ == "__main__": + main() From 9ade43d1ae88d5cd4f63090f78494e47dbea52bf Mon Sep 17 00:00:00 2001 From: mcbarton <150042563+mcbarton@users.noreply.github.com> Date: Thu, 20 Nov 2025 20:50:58 +0000 Subject: [PATCH 03/66] Run smallpt.ipynb in ci and test output for Safari, Chrome and Firefox --- .github/workflows/main.yml | 40 +++++++++++++++++++++--- scripts/automated-notebook-run-script.py | 29 ++++++++++++----- 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 66278c66..9c3fdde2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -202,8 +202,8 @@ jobs: include: - name: ubu24 os: ubuntu-24.04 - - name: osx15-arm - os: macos-15 + - name: osx26-arm + os: macos-26 steps: - uses: actions/checkout@v5 @@ -329,12 +329,44 @@ jobs: fi timeout-minutes: 4 - - name: Jupyter Lite integration + - name: Jupyter Lite integration test shell: bash -l {0} run: | + set -e micromamba create -n xeus-lite-host jupyterlite-core=0.6 jupyterlite-xeus -c conda-forge micromamba activate xeus-lite-host - jupyter lite build --XeusAddon.prefix=${{ env.PREFIX }} + if [[ "${{ matrix.os }}" == "macos"* ]]; then + brew install coreutils + export PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$PATH" + fi + timeout 1400 jupyter lite serve --settings-overrides=overrides.json --XeusAddon.prefix=${{ env.PREFIX }} \ + --XeusAddon.mounts="${{ env.PREFIX }}/share/xeus-cpp/tagfiles:/share/xeus-cpp/tagfiles" \ + --XeusAddon.mounts="${{ env.PREFIX }}/etc/xeus-cpp/tags.d:/etc/xeus-cpp/tags.d" \ + --contents README.md \ + --contents notebooks/xeus-cpp-lite-demo.ipynb \ + --contents notebooks/smallpt.ipynb \ + --contents notebooks/images/marie.png \ + --contents notebooks/audio/audio.wav & + python -m pip install nbdime + python -m pip install selenium + # This sleep is to force enough time for the jupyter site to build before trying + # to run notebooks in it. If you try to run the notebooks before the website is + # ready the ci python script will crash saying ti cannot access the url + sleep 10 + python scripts/automated-notebook-run-script.py --driver chrome + nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb + rm $HOME/Downloads/smallpt.ipynb + python scripts/automated-notebook-run-script.py --driver firefox + nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb + rm $HOME/Downloads/smallpt.ipynb + if [[ "${{ matrix.os }}" == "macos"* ]]; then + defaults write com.apple.Safari AskBeforeDownloading -bool false + python scripts/automated-notebook-run-script.py --driver safari + find $HOME -name "*smallpt*" + nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb + rm $HOME/Downloads/smallpt.ipynb + fi + timeout-minutes: 25 - name: Setup tmate session if: ${{ failure() && runner.debug }} diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 5d72b0e7..26ca2211 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -1,12 +1,14 @@ import argparse from selenium import webdriver +from selenium.webdriver.chrome.options import Options as ChromeOptions +from selenium.webdriver.firefox.options import Options as FirefoxOptions from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time - +import subprocess def main(): parser = argparse.ArgumentParser(description="Run Selenium with a chosen driver") @@ -24,10 +26,15 @@ def main(): # This will start the right driver depending on what # driver option is chosen if args.driver == "chrome": - driver = webdriver.Chrome() + options = ChromeOptions() + options.add_argument("--headless") + options.add_argument("--no-sandbox") + driver = webdriver.Chrome(options=options) elif args.driver == "firefox": - driver = webdriver.Firefox() + options = FirefoxOptions() + options.add_argument("--headless") + driver = webdriver.Firefox(options=options) elif args.driver == "safari": driver = webdriver.Safari() @@ -63,7 +70,7 @@ def main(): ) ) actions.move_to_element(run_all_menu).click().perform() - time.sleep(100) + time.sleep(300) elif args.driver == "firefox": print("Opening Run Menu") @@ -79,7 +86,7 @@ def main(): ) ) actions.move_to_element(run_all_menu).click().perform() - time.sleep(100) + time.sleep(200) elif args.driver == "safari": print("Running all cells using Shift+Enter...") @@ -102,7 +109,7 @@ def main(): notebook_area.send_keys(Keys.SHIFT, Keys.ENTER) time.sleep(0.5) - time.sleep(145) + time.sleep(600) if args.driver == "chrome" or args.driver == "firefox": print("Saving notebook") @@ -161,8 +168,13 @@ def main(): return deepQuerySelector(document, "jp-button[data-command='docmanager:download']"); """ - download_button = driver.execute_script(search_script) + download_button = WebDriverWait(driver, 20).until( + lambda d: d.execute_script(search_script) + ) + + print("Found element:", download_button) + time.sleep(20) driver.execute_script( """ const el = arguments[0]; @@ -182,7 +194,8 @@ def main(): """, download_button, ) - time.sleep(2) + + time.sleep(20) # Close browser driver.quit() From fe88bf51cbd9ee4e36b93f8ec3788828218b5757 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sat, 22 Nov 2025 16:47:07 +0000 Subject: [PATCH 04/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 33 ++++++++++++------------ 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 26ca2211..ea75a018 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -175,25 +175,26 @@ def main(): print("Found element:", download_button) time.sleep(20) - driver.execute_script( - """ - const el = arguments[0]; - - // Force element to be visible and focused - el.scrollIntoView({block: 'center', inline: 'center'}); - - // Dispatch real mouse events since Safari WebDriver ignores .click() on Web Components - ['pointerdown', 'mousedown', 'mouseup', 'click'].forEach(type => { - el.dispatchEvent(new MouseEvent(type, { + driver.execute_script(""" +const el = arguments[0]; + +function fire(type) { + el.dispatchEvent(new MouseEvent(type, { bubbles: true, cancelable: true, - composed: true, // IMPORTANT for shadow DOM + composed: true, view: window - })); - }); - """, - download_button, - ) + })); +} + +el.scrollIntoView({ block: 'center', inline: 'center' }); +el.focus({ preventScroll: true }); + +fire('pointerdown'); +fire('mousedown'); +fire('mouseup'); +fire('click'); +""", download_button) time.sleep(20) From 7f6f9245cadf941082e02108a7365012a88db951 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sat, 22 Nov 2025 17:16:05 +0000 Subject: [PATCH 05/66] Update main.yml --- .github/workflows/main.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9c3fdde2..e16f1bfe 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -353,19 +353,18 @@ jobs: # to run notebooks in it. If you try to run the notebooks before the website is # ready the ci python script will crash saying ti cannot access the url sleep 10 + if [[ "${{ matrix.os }}" == "macos"* ]]; then + python scripts/automated-notebook-run-script.py --driver safari + find / -name "*smallpt*" + nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb + rm $HOME/Downloads/smallpt.ipynb + fi python scripts/automated-notebook-run-script.py --driver chrome nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb rm $HOME/Downloads/smallpt.ipynb python scripts/automated-notebook-run-script.py --driver firefox nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb rm $HOME/Downloads/smallpt.ipynb - if [[ "${{ matrix.os }}" == "macos"* ]]; then - defaults write com.apple.Safari AskBeforeDownloading -bool false - python scripts/automated-notebook-run-script.py --driver safari - find $HOME -name "*smallpt*" - nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb - rm $HOME/Downloads/smallpt.ipynb - fi timeout-minutes: 25 - name: Setup tmate session From f811854d4a104ad386edf25e17c59216ec0e2ab4 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sat, 22 Nov 2025 17:38:53 +0000 Subject: [PATCH 06/66] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e16f1bfe..fe822455 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -355,7 +355,7 @@ jobs: sleep 10 if [[ "${{ matrix.os }}" == "macos"* ]]; then python scripts/automated-notebook-run-script.py --driver safari - find / -name "*smallpt*" + ls $HOME/Downloads/ nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb rm $HOME/Downloads/smallpt.ipynb fi From 362f354c214307aebd1f80e623466d9a5b82f3cd Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 09:56:19 +0000 Subject: [PATCH 07/66] Update main.yml --- .github/workflows/main.yml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fe822455..d4f44091 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -355,18 +355,14 @@ jobs: sleep 10 if [[ "${{ matrix.os }}" == "macos"* ]]; then python scripts/automated-notebook-run-script.py --driver safari - ls $HOME/Downloads/ - nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb - rm $HOME/Downloads/smallpt.ipynb - fi - python scripts/automated-notebook-run-script.py --driver chrome - nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb - rm $HOME/Downloads/smallpt.ipynb - python scripts/automated-notebook-run-script.py --driver firefox - nbdiff notebooks/smallpt.ipynb $HOME/Downloads/smallpt.ipynb - rm $HOME/Downloads/smallpt.ipynb + fi timeout-minutes: 25 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./screenshot.png + - name: Setup tmate session if: ${{ failure() && runner.debug }} uses: mxschmitt/action-tmate@v3 From baae20787fc46457eafac758287fc6a00d4b7f33 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 09:58:23 +0000 Subject: [PATCH 08/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index ea75a018..49fbca31 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -195,9 +195,13 @@ def main(): fire('mouseup'); fire('click'); """, download_button) + time.sleep(1) + output_file = "screenshot.png" + subprocess.run(["screencapture", "-x", output_file]) - time.sleep(20) - + print(f"Saved {output_file}") + time.sleep(10) + # Close browser driver.quit() From 0c18f365e40a42d9a61376d290b2766a20763e29 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 09:59:33 +0000 Subject: [PATCH 09/66] Update main.yml --- .github/workflows/main.yml | 251 ------------------------------------- 1 file changed, 251 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d4f44091..e4eba449 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,182 +16,6 @@ concurrency: cancel-in-progress: true jobs: - build: - - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - include: - - name: ubu24 - os: ubuntu-24.04 - micromamba_shell_init: bash - - name: ubu24-arm - os: ubuntu-24.04-arm - micromamba_shell_init: bash - - name: ubu24-analyzers - os: ubuntu-24.04 - coverage: true - debug: on - micromamba_shell_init: bash - - name: ubu22 - os: ubuntu-22.04 - micromamba_shell_init: bash - - name: ubu22-arm - os: ubuntu-22.04-arm - micromamba_shell_init: bash - - name: osx15-x86 - os: macos-15-intel - micromamba_shell_init: bash - - name: osx14-arm - os: macos-14 - micromamba_shell_init: bash - - name: osx15-arm - os: macos-15 - micromamba_shell_init: bash - - name: osx26-arm - os: macos-26 - micromamba_shell_init: bash - - name: Windows22 - os: windows-2022 - micromamba_shell_init: cmd.exe - - name: Windows25 - os: windows-2025 - micromamba_shell_init: cmd.exe - - steps: - - uses: actions/checkout@v5 - with: - fetch-depth: 0 - - - name: install mamba - uses: mamba-org/setup-micromamba@main - with: - environment-file: environment-dev.yml - init-shell: >- - ${{ matrix.micromamba_shell_init }} - environment-name: xeus-cpp - - - name: Setup default Build Type on *nux - if: ${{ runner.os != 'windows' }} - run: | - os="${{ matrix.os }}" - if [[ "${{ matrix.debug }}" == "on" ]]; then - echo "BUILD_TYPE=Debug" >> $GITHUB_ENV - fi - if [[ "${os}" == "macos"* ]]; then - echo "ncpus=$(sysctl -n hw.ncpu)" >> $GITHUB_ENV - else - echo "ncpus=$(nproc --all)" >> $GITHUB_ENV - fi - - name: Setup default Build Type on Windows - if: ${{ runner.os == 'windows' }} - run: | - $env:ncpus=$([Environment]::ProcessorCount) - echo "ncpus=$env:ncpus" >> $env:GITHUB_ENV - - - name: micromamba shell hook - if: ${{ runner.os == 'windows' }} - shell: powershell - run: | - micromamba shell hook -s cmd.exe --root-prefix C:\Users\runneradmin\micromamba-root - - - name: cmake configure - if: ${{ runner.os == 'windows' }} - shell: cmd /C call {0} - run: | - call C:\Users\runneradmin\micromamba-root\condabin\micromamba.bat activate xeus-cpp - mkdir -p build - cd build - cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DXEUS_BUILD_TESTS=ON -DDEPENDENCY_SEARCH_PREFIX="%CONDA_PREFIX%\Library" -DCMAKE_PREFIX_PATH="%CONDA_PREFIX%\Library" -DCMAKE_INSTALL_PREFIX="%CONDA_PREFIX%" - - - name: cmake configure - if: ${{ runner.os != 'windows' }} - shell: bash -l {0} - run: | - mkdir -p build - cd build - cmake .. \ - -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \ - -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX \ - -DXEUS_CPP_ENABLE_CODE_COVERAGE=${{ matrix.coverage }} \ - -DCMAKE_COMPILE_WARNING_AS_ERROR=ON \ - -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} - - - name: build, run C++ tests & install - if: ${{ runner.os == 'windows' }} - shell: cmd /C call {0} - run: | - call C:\Users\runneradmin\micromamba-root\condabin\micromamba.bat activate xeus-cpp - cd build - set CL=/MP - nmake check-xeus-cpp - nmake install - - - name: build, run C++ tests & install - if: ${{ runner.os != 'windows' }} - shell: bash -l {0} - run: | - cd build - make install -j ${{ env.ncpus }} - make -j ${{ env.ncpus }} check-xeus-cpp - if [[ "${{ matrix.os }}" != "macos"* && "${{ matrix.debug }}" == "on" ]]; then - sudo apt update - sudo apt install libc6-dbg - micromamba install -c conda-forge valgrind - valgrind --show-error-list=yes --track-origins=yes --error-exitcode=1 \ - --show-leak-kinds=definite,possible \ - --gen-suppressions=all \ - --suppressions="../etc/xeus-cpp-valgrind_x86.supp" \ - test/test_xeus_cpp - fi - - - name: Python tests Unix Systems - if: ${{ runner.os != 'windows' }} - shell: bash -l {0} - run: | - cd test - pytest -sv . - - - name: Python tests Windows Systems - if: ${{ runner.os == 'windows' }} - shell: cmd /C call {0} - run: | - call C:\Users\runneradmin\micromamba-root\condabin\micromamba.bat activate xeus-cpp - cd test - pytest -sv test_xcpp_kernel.py - - - name: Prepare code coverage report - if: ${{ success() && (matrix.coverage == true) }} - shell: bash -l {0} - run: | - # Create lcov report - # Find the current compiler version. - CC=$(realpath `which c++`) - vers="${CC##*-}" - sudo apt install lcov - # capture coverage info - lcov --directory build/ --capture --output-file coverage.info --gcov-tool $CONDA_PREFIX/bin/gcov - lcov --remove coverage.info '/usr/*' "${HOME}"'/.cache/*' ${{ github.workspace }}'/test/*' --output-file coverage.info - # output coverage data for debugging (optional) - lcov --list coverage.info - - - name: Upload to codecov.io - if: ${{ success() && (matrix.coverage == true) }} - uses: codecov/codecov-action@v5 - with: - files: ./coverage.info - fail_ci_if_error: true - verbose: true - token: ${{ secrets.CODECOV_TOKEN }} - - - name: Setup tmate session - if: ${{ failure() && runner.debug }} - uses: mxschmitt/action-tmate@v3 - # When debugging increase to a suitable value! - timeout-minutes: 30 - emscripten_wasm: runs-on: ${{ matrix.os }} @@ -253,82 +77,8 @@ jobs: -DCMAKE_COMPILE_WARNING_AS_ERROR=ON \ .. - emmake make check-xeus-cpp -j ${{ env.ncpus }} emmake make -j ${{ env.ncpus }} install - - name: Test Emscripten xeus-cpp in browser - shell: bash -l {0} - run: | - set -e - cd build/test - # Fresh install browsers, and run Emscripten tests in them - # This is to match the Emscripten build instructions, where - # we run in a fresh browser, to stop any extra installed - # stuff interferring with the running of the tests - # Explaination of options for emrun - # --browser (name of browser on path) - # --kill_exit makes it so that when emrun finishes, - # that the headless browser we create is killed along with it - # --timeout 60 is such that emrun is killed after 60 seconds if - # still running. emrun should have finished long before then, - # so if it is still running, something went wrong (such as a test - # which crashed the html file). This will cause the ci to fail, - # as a non 0 value of will be returned. - # In the case of Chrome we have the extra --no-sandbox flag, as on - # Ubuntu Chrome will refuse to run otherwise, as it expects to have - # been installed with admin privileges. This flag allows it to run - # in userspace. - os="${{ matrix.os }}" - if [[ "${os}" == "macos"* ]]; then - # Install Firefox - wget "https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" -O Firefox-latest.dmg - hdiutil attach Firefox-latest.dmg - cp -r /Volumes/Firefox/Firefox.app $PWD - hdiutil detach /Volumes/Firefox - cd ./Firefox.app/Contents/MacOS/ - export PATH="$PWD:$PATH" - cd - - - # Install Google Chrome - wget https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg - pkgutil --expand-full googlechrome.pkg google-chrome - cd ./google-chrome/GoogleChrome.pkg/Payload/Google\ Chrome.app/Contents/MacOS/ - export PATH="$PWD:$PATH" - cd - - - # Run tests in browsers - echo "Running test_xeus_cpp in Firefox" - python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" test_xeus_cpp.html - echo "Running test_xeus_cpp in Google Chrome" - python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" test_xeus_cpp.html - sudo safaridriver --enable - python -m pip install selenium - echo "Running test_xeus_cpp in Safari" - python ${{ env.BUILD_PREFIX }}/bin/emrun.py --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" test_xeus_cpp.html & - python ../../scripts/browser_tests_safari.py test_xeus_cpp.html - else - # Install Google Chrome - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb - dpkg-deb -x google-chrome-stable_current_amd64.deb $PWD/chrome - cd ./chrome/opt/google/chrome/ - export PATH="$PWD:$PATH" - cd - - - # Install Firefox - wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-x86_64/en-GB/firefox-138.0.1.tar.xz - tar -xJf firefox-138.0.1.tar.xz - cd ./firefox - export PATH="$PWD:$PATH" - cd - - - # Run tests in browsers - echo "Running test_xeus_cpp in Firefox" - python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" test_xeus_cpp.html - echo "Running test_xeus_cpp in Google Chrome" - python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" test_xeus_cpp.html - fi - timeout-minutes: 4 - - name: Jupyter Lite integration test shell: bash -l {0} run: | @@ -347,7 +97,6 @@ jobs: --contents notebooks/smallpt.ipynb \ --contents notebooks/images/marie.png \ --contents notebooks/audio/audio.wav & - python -m pip install nbdime python -m pip install selenium # This sleep is to force enough time for the jupyter site to build before trying # to run notebooks in it. If you try to run the notebooks before the website is From 8858cb44fa0e44f02012b77fabad15074a365d8b Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 10:09:32 +0000 Subject: [PATCH 10/66] Update main.yml --- .github/workflows/main.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e4eba449..02c13f47 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,8 +24,6 @@ jobs: fail-fast: false matrix: include: - - name: ubu24 - os: ubuntu-24.04 - name: osx26-arm os: macos-26 @@ -83,7 +81,7 @@ jobs: shell: bash -l {0} run: | set -e - micromamba create -n xeus-lite-host jupyterlite-core=0.6 jupyterlite-xeus -c conda-forge + micromamba create -n xeus-lite-host jupyterlite-core=0.6 jupyterlite-xeus jupyter-server -c conda-forge micromamba activate xeus-lite-host if [[ "${{ matrix.os }}" == "macos"* ]]; then brew install coreutils From 4ae3dc891121448c2643097d6d19f4591b97a05b Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 10:14:57 +0000 Subject: [PATCH 11/66] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 02c13f47..2cacee89 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -81,7 +81,7 @@ jobs: shell: bash -l {0} run: | set -e - micromamba create -n xeus-lite-host jupyterlite-core=0.6 jupyterlite-xeus jupyter-server -c conda-forge + micromamba create -n xeus-lite-host jupyterlite-core=0.6 jupyterlite-xeus jupyter_server -c conda-forge micromamba activate xeus-lite-host if [[ "${{ matrix.os }}" == "macos"* ]]; then brew install coreutils From 33c12339be9dd35655b8baea00af630ccfc32a34 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 10:29:56 +0000 Subject: [PATCH 12/66] Update main.yml --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2cacee89..c456899f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -102,13 +102,15 @@ jobs: sleep 10 if [[ "${{ matrix.os }}" == "macos"* ]]; then python scripts/automated-notebook-run-script.py --driver safari + mkdir screenshots + mv screenshot.png screenshots fi timeout-minutes: 25 - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - path: ./screenshot.png + path: ./screenshots - name: Setup tmate session if: ${{ failure() && runner.debug }} From e0616cd84305f112d7d8b70b57d528c7bedaad43 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 16:36:51 +0000 Subject: [PATCH 13/66] Update main.yml --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c456899f..1394b720 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -96,12 +96,14 @@ jobs: --contents notebooks/images/marie.png \ --contents notebooks/audio/audio.wav & python -m pip install selenium + python -m pip install PyAutoGUI # This sleep is to force enough time for the jupyter site to build before trying # to run notebooks in it. If you try to run the notebooks before the website is # ready the ci python script will crash saying ti cannot access the url sleep 10 if [[ "${{ matrix.os }}" == "macos"* ]]; then python scripts/automated-notebook-run-script.py --driver safari + ls $HOME/Downloads/ mkdir screenshots mv screenshot.png screenshots fi From 9b06b0dc04973a2bfa5a9d3ac8b186a20c3735c6 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 16:41:47 +0000 Subject: [PATCH 14/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 49fbca31..ec52726e 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,6 +9,7 @@ from selenium.webdriver.common.keys import Keys import time import subprocess +import pyautogui def main(): parser = argparse.ArgumentParser(description="Run Selenium with a chosen driver") @@ -196,6 +197,8 @@ def main(): fire('click'); """, download_button) time.sleep(1) + pyautogui.moveTo(695, 323, duration=1) + pyautogui.click() output_file = "screenshot.png" subprocess.run(["screencapture", "-x", output_file]) From b770730345be46cf52de5b91c9c7bedfd73024f1 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 17:22:10 +0000 Subject: [PATCH 15/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index ec52726e..87e223e4 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -199,6 +199,7 @@ def main(): time.sleep(1) pyautogui.moveTo(695, 323, duration=1) pyautogui.click() + time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-x", output_file]) From 3c615e6f444439d32543c362098626e7b5e8a2cf Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 17:29:36 +0000 Subject: [PATCH 16/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 87e223e4..825af2d1 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -201,7 +201,7 @@ def main(): pyautogui.click() time.sleep(1) output_file = "screenshot.png" - subprocess.run(["screencapture", "-x", output_file]) + subprocess.run(["screencapture", "-C", output_file]) print(f"Saved {output_file}") time.sleep(10) From 3ccf46c2fb48b310b030af0f2b7f35220e5620f7 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 17:46:39 +0000 Subject: [PATCH 17/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 825af2d1..fbdcf216 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -197,7 +197,7 @@ def main(): fire('click'); """, download_button) time.sleep(1) - pyautogui.moveTo(695, 323, duration=1) + pyautogui.moveTo(695, 223, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From aed440212f859a9ae090c6d879dc5177b0906d05 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 18:05:50 +0000 Subject: [PATCH 18/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index fbdcf216..c624489c 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -197,7 +197,7 @@ def main(): fire('click'); """, download_button) time.sleep(1) - pyautogui.moveTo(695, 223, duration=1) + pyautogui.moveTo(695, 373, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From 68e9821a54351cfa431495016fbac499c7b517be Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 18:22:07 +0000 Subject: [PATCH 19/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index c624489c..06a7a2a3 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -197,7 +197,7 @@ def main(): fire('click'); """, download_button) time.sleep(1) - pyautogui.moveTo(695, 373, duration=1) + pyautogui.moveTo(695, 423, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From d9980fd464970b324331512bcc64140d3d99155f Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 18:38:50 +0000 Subject: [PATCH 20/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 06a7a2a3..975921e5 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -197,7 +197,7 @@ def main(): fire('click'); """, download_button) time.sleep(1) - pyautogui.moveTo(695, 423, duration=1) + pyautogui.moveTo(695, 433, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From 694d6bbad51d8226c784f8f8f3f1981115b4b204 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 18:56:02 +0000 Subject: [PATCH 21/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 975921e5..48ff04a0 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -197,7 +197,7 @@ def main(): fire('click'); """, download_button) time.sleep(1) - pyautogui.moveTo(695, 433, duration=1) + pyautogui.moveTo(695, 443, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From e315f528fccb52acf4bfcdc2188c7944e71f43ae Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:17:47 +0000 Subject: [PATCH 22/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 48ff04a0..a39f9ec6 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -110,7 +110,7 @@ def main(): notebook_area.send_keys(Keys.SHIFT, Keys.ENTER) time.sleep(0.5) - time.sleep(600) + time.sleep(5) if args.driver == "chrome" or args.driver == "firefox": print("Saving notebook") @@ -134,7 +134,13 @@ def main(): notebook_area.send_keys(Keys.ENTER) time.sleep(0.5) - + pyautogui.hotkey('command', ',') + time.sleep(1) + pyautogui.moveTo(200, 443, duration=1) + #pyautogui.moveTo(695, 443, duration=1) + pyautogui.click() + time.sleep(1) + # This downloads the notebook, so it can be compared # to a reference notebook print("Downloading notebook by clicking download button") @@ -196,9 +202,6 @@ def main(): fire('mouseup'); fire('click'); """, download_button) - time.sleep(1) - pyautogui.moveTo(695, 443, duration=1) - pyautogui.click() time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From fcb2bce8379852b3d2430501121638f1f9f4622d Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:25:24 +0000 Subject: [PATCH 23/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index a39f9ec6..8927da9d 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -110,7 +110,7 @@ def main(): notebook_area.send_keys(Keys.SHIFT, Keys.ENTER) time.sleep(0.5) - time.sleep(5) + time.sleep(10) if args.driver == "chrome" or args.driver == "firefox": print("Saving notebook") @@ -133,7 +133,7 @@ def main(): time.sleep(0.5) notebook_area.send_keys(Keys.ENTER) - time.sleep(0.5) + time.sleep(1) pyautogui.hotkey('command', ',') time.sleep(1) pyautogui.moveTo(200, 443, duration=1) @@ -175,13 +175,13 @@ def main(): return deepQuerySelector(document, "jp-button[data-command='docmanager:download']"); """ - download_button = WebDriverWait(driver, 20).until( + download_button = WebDriverWait(driver, 5).until( lambda d: d.execute_script(search_script) ) print("Found element:", download_button) - time.sleep(20) + time.sleep(1) driver.execute_script(""" const el = arguments[0]; @@ -207,7 +207,7 @@ def main(): subprocess.run(["screencapture", "-C", output_file]) print(f"Saved {output_file}") - time.sleep(10) + time.sleep(1) # Close browser driver.quit() From f6e5f1304140cad480d4d56292e682fc5ffb2662 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:32:46 +0000 Subject: [PATCH 24/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 58 ------------------------ 1 file changed, 58 deletions(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 8927da9d..cd8f118a 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -144,64 +144,6 @@ def main(): # This downloads the notebook, so it can be compared # to a reference notebook print("Downloading notebook by clicking download button") - search_script = """ - function deepQuerySelector(root, selector) { - const walker = document.createTreeWalker( - root, - NodeFilter.SHOW_ELEMENT, - { - acceptNode: node => NodeFilter.FILTER_ACCEPT - }, - false - ); - - while (walker.nextNode()) { - let node = walker.currentNode; - - // Check if this node matches - if (node.matches && node.matches(selector)) { - return node; - } - - // If this element has a shadow root, search inside it - if (node.shadowRoot) { - const found = deepQuerySelector(node.shadowRoot, selector); - if (found) return found; - } - } - return null; - } - - return deepQuerySelector(document, "jp-button[data-command='docmanager:download']"); - """ - - download_button = WebDriverWait(driver, 5).until( - lambda d: d.execute_script(search_script) - ) - - print("Found element:", download_button) - - time.sleep(1) - driver.execute_script(""" -const el = arguments[0]; - -function fire(type) { - el.dispatchEvent(new MouseEvent(type, { - bubbles: true, - cancelable: true, - composed: true, - view: window - })); -} - -el.scrollIntoView({ block: 'center', inline: 'center' }); -el.focus({ preventScroll: true }); - -fire('pointerdown'); -fire('mousedown'); -fire('mouseup'); -fire('click'); -""", download_button) time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From f1da2684394233879bccc674db4de23872c78a9c Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:41:29 +0000 Subject: [PATCH 25/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index cd8f118a..39ddd497 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -134,9 +134,8 @@ def main(): notebook_area.send_keys(Keys.ENTER) time.sleep(1) - pyautogui.hotkey('command', ',') time.sleep(1) - pyautogui.moveTo(200, 443, duration=1) + pyautogui.moveTo(10, 10, duration=1) #pyautogui.moveTo(695, 443, duration=1) pyautogui.click() time.sleep(1) From f15dc88422f8c0889f0adc10afcc4b69725d6baf Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:46:58 +0000 Subject: [PATCH 26/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 147 +---------------------- 1 file changed, 1 insertion(+), 146 deletions(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 39ddd497..b4ebf2c3 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -1,158 +1,13 @@ -import argparse -from selenium import webdriver -from selenium.webdriver.chrome.options import Options as ChromeOptions -from selenium.webdriver.firefox.options import Options as FirefoxOptions -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -import time import subprocess import pyautogui def main(): - parser = argparse.ArgumentParser(description="Run Selenium with a chosen driver") - parser.add_argument( - "--driver", - type=str, - default="chrome", - choices=["chrome", "firefox", "safari"], - help="Choose which WebDriver to use", - ) - - args = parser.parse_args() - URL = "http://127.0.0.1:8000/lab/index.html?path=smallpt.ipynb" - - # This will start the right driver depending on what - # driver option is chosen - if args.driver == "chrome": - options = ChromeOptions() - options.add_argument("--headless") - options.add_argument("--no-sandbox") - driver = webdriver.Chrome(options=options) - - elif args.driver == "firefox": - options = FirefoxOptions() - options.add_argument("--headless") - driver = webdriver.Firefox(options=options) - - elif args.driver == "safari": - driver = webdriver.Safari() - - wait = WebDriverWait(driver, 30) - actions = ActionChains(driver) - - # Open Jupyter Lite with the notebook requested - driver.get(URL) - - # Waiting for Jupyter Lite URL to finish loading - notebook_area = wait.until( - EC.presence_of_element_located((By.CSS_SELECTOR, ".jp-Notebook")) - ) - - time.sleep(1) - - notebook_area.click() - time.sleep(0.5) - - # This will run all the cells of the chosen notebook - if args.driver == "chrome": - print("Opening Run Menu") - run_menu = wait.until( - EC.element_to_be_clickable((By.XPATH, "//li[normalize-space()='Run']")) - ) - actions.move_to_element(run_menu).pause(0.1).click().perform() - time.sleep(0.5) - print("Click on Run All Cells") - run_all_menu = wait.until( - EC.visibility_of_element_located( - (By.XPATH, "//li[normalize-space()='Run All Cells']") - ) - ) - actions.move_to_element(run_all_menu).click().perform() - time.sleep(300) - - elif args.driver == "firefox": - print("Opening Run Menu") - run_menu = wait.until( - EC.element_to_be_clickable((By.XPATH, "//li[normalize-space()='Run']")) - ) - actions.move_to_element(run_menu).pause(0.1).click().perform() - time.sleep(0.5) - print("Click on Run All Cells") - run_all_menu = wait.until( - EC.element_to_be_clickable( - (By.XPATH, "//li[normalize-space()='Run All Cells']") - ) - ) - actions.move_to_element(run_all_menu).click().perform() - time.sleep(200) - - elif args.driver == "safari": - print("Running all cells using Shift+Enter...") - while True: - # Focused cell - focused_cell = driver.find_element( - By.CSS_SELECTOR, ".jp-Notebook-cell.jp-mod-selected" - ) - - # Get the cell content text reliably in Safari - editor_divs = focused_cell.find_elements( - By.CSS_SELECTOR, ".jp-InputArea-editor div" - ) - cell_content = "".join([div.text for div in editor_divs]).strip() - - if not cell_content: - break - - # Press Shift+Enter to run the cell - notebook_area.send_keys(Keys.SHIFT, Keys.ENTER) - time.sleep(0.5) - - time.sleep(10) - - if args.driver == "chrome" or args.driver == "firefox": - print("Saving notebook") - file_menu = wait.until( - EC.element_to_be_clickable((By.XPATH, "//li[normalize-space()='File']")) - ) - actions.move_to_element(file_menu).click().perform() - save_item = wait.until( - EC.visibility_of_element_located( - (By.XPATH, "//li[contains(normalize-space(), 'Save')]") - ) - ) - - actions.move_to_element(save_item).click().perform() - time.sleep(0.5) - - elif args.driver == "safari": - print("Saving notebook using command + s + enter.") - notebook_area.send_keys(Keys.COMMAND, "s") - time.sleep(0.5) - - notebook_area.send_keys(Keys.ENTER) - time.sleep(1) - time.sleep(1) - pyautogui.moveTo(10, 10, duration=1) - #pyautogui.moveTo(695, 443, duration=1) + pyautogui.moveTo(1000, 10, duration=1) pyautogui.click() time.sleep(1) - - # This downloads the notebook, so it can be compared - # to a reference notebook - print("Downloading notebook by clicking download button") - time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) - print(f"Saved {output_file}") - time.sleep(1) - - # Close browser - driver.quit() - if __name__ == "__main__": main() From 71a6ab2b1b6f2fe00032101eccb62911ea6b3dee Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:48:11 +0000 Subject: [PATCH 27/66] Update main.yml --- .github/workflows/main.yml | 69 +------------------------------------- 1 file changed, 1 insertion(+), 68 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1394b720..a5e85c2c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,78 +32,16 @@ jobs: with: fetch-depth: 0 - - name: install mamba - uses: mamba-org/setup-micromamba@main - with: - environment-file: environment-wasm-build.yml - init-shell: bash - environment-name: xeus-cpp-wasm-build - - - name: Setup default Build Type on *nux - if: ${{ runner.os != 'windows' }} - run: | - os="${{ matrix.os }}" - if [[ "${os}" == "macos"* ]]; then - echo "ncpus=$(sysctl -n hw.ncpu)" >> $GITHUB_ENV - else - echo "ncpus=$(nproc --all)" >> $GITHUB_ENV - fi - - - name: Build and test xeus-cpp in node, then install - shell: bash -l {0} - run: | - micromamba create -f environment-wasm-host.yml --platform=emscripten-wasm32 - - mkdir build - pushd build - - export BUILD_PREFIX=$MAMBA_ROOT_PREFIX/envs/xeus-cpp-wasm-build - echo "BUILD_PREFIX=$BUILD_PREFIX" >> $GITHUB_ENV - export PREFIX=$MAMBA_ROOT_PREFIX/envs/xeus-cpp-wasm-host - echo "PREFIX=$PREFIX" >> $GITHUB_ENV - export SYSROOT_PATH=$BUILD_PREFIX/opt/emsdk/upstream/emscripten/cache/sysroot - - micromamba create -n node-env -c conda-forge nodejs=22 - export PATH="$MAMBA_ROOT_PREFIX/envs/node-env/bin:$PATH" - - emcmake cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DXEUS_CPP_EMSCRIPTEN_WASM_BUILD=ON \ - -DCMAKE_FIND_ROOT_PATH=$PREFIX \ - -DSYSROOT_PATH=$SYSROOT_PATH \ - -DCMAKE_COMPILE_WARNING_AS_ERROR=ON \ - .. - - emmake make -j ${{ env.ncpus }} install - - name: Jupyter Lite integration test shell: bash -l {0} run: | - set -e - micromamba create -n xeus-lite-host jupyterlite-core=0.6 jupyterlite-xeus jupyter_server -c conda-forge - micromamba activate xeus-lite-host - if [[ "${{ matrix.os }}" == "macos"* ]]; then - brew install coreutils - export PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$PATH" - fi - timeout 1400 jupyter lite serve --settings-overrides=overrides.json --XeusAddon.prefix=${{ env.PREFIX }} \ - --XeusAddon.mounts="${{ env.PREFIX }}/share/xeus-cpp/tagfiles:/share/xeus-cpp/tagfiles" \ - --XeusAddon.mounts="${{ env.PREFIX }}/etc/xeus-cpp/tags.d:/etc/xeus-cpp/tags.d" \ - --contents README.md \ - --contents notebooks/xeus-cpp-lite-demo.ipynb \ - --contents notebooks/smallpt.ipynb \ - --contents notebooks/images/marie.png \ - --contents notebooks/audio/audio.wav & - python -m pip install selenium python -m pip install PyAutoGUI # This sleep is to force enough time for the jupyter site to build before trying # to run notebooks in it. If you try to run the notebooks before the website is # ready the ci python script will crash saying ti cannot access the url sleep 10 if [[ "${{ matrix.os }}" == "macos"* ]]; then - python scripts/automated-notebook-run-script.py --driver safari - ls $HOME/Downloads/ + python scripts/automated-notebook-run-script.py mkdir screenshots mv screenshot.png screenshots fi @@ -114,8 +52,3 @@ jobs: with: path: ./screenshots - - name: Setup tmate session - if: ${{ failure() && runner.debug }} - uses: mxschmitt/action-tmate@v3 - # When debugging increase to a suitable value! - timeout-minutes: 30 From 6e29bb4ff98fab2e393e1f42a8f32dbfac5b3503 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:49:55 +0000 Subject: [PATCH 28/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index b4ebf2c3..d632d3b6 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -1,5 +1,6 @@ import subprocess import pyautogui +import time def main(): pyautogui.moveTo(1000, 10, duration=1) From 075dc7222cbc8b5d97154eaabc864af495c731d7 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:50:15 +0000 Subject: [PATCH 29/66] Delete .github/workflows/deploy-github-page.yml --- .github/workflows/deploy-github-page.yml | 178 ----------------------- 1 file changed, 178 deletions(-) delete mode 100644 .github/workflows/deploy-github-page.yml diff --git a/.github/workflows/deploy-github-page.yml b/.github/workflows/deploy-github-page.yml deleted file mode 100644 index fc6c728e..00000000 --- a/.github/workflows/deploy-github-page.yml +++ /dev/null @@ -1,178 +0,0 @@ -name: Build and Deploy - -on: - workflow_dispatch: - pull_request: - push: - branches: - - main - schedule: - - cron: '30 20 * * *' # Warning: Timezone dep - 20:00 is 1:00 - -permissions: - contents: read - pages: write - id-token: write - -jobs: - build: - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - include: - - name: Github-page - os: ubuntu-24.04 - - steps: - - uses: actions/checkout@v5 - with: - fetch-depth: 0 - - - name: install mamba - uses: mamba-org/setup-micromamba@main - with: - environment-file: environment-wasm-build.yml - init-shell: bash - environment-name: xeus-cpp-wasm-build - - - name: Setup default Build Type on *nux - if: ${{ runner.os != 'windows' }} - run: | - echo "ncpus=$(nproc --all)" >> $GITHUB_ENV - - - name: Build and test xeus-cpp in node, then install - shell: bash -l {0} - run: | - micromamba create -f environment-wasm-host.yml --platform=emscripten-wasm32 - - mkdir build - pushd build - - export BUILD_PREFIX=$MAMBA_ROOT_PREFIX/envs/xeus-cpp-wasm-build - echo "BUILD_PREFIX=$BUILD_PREFIX" >> $GITHUB_ENV - export PREFIX=$MAMBA_ROOT_PREFIX/envs/xeus-cpp-wasm-host - echo "PREFIX=$PREFIX" >> $GITHUB_ENV - export SYSROOT_PATH=$BUILD_PREFIX/opt/emsdk/upstream/emscripten/cache/sysroot - - micromamba create -n node-env -c conda-forge nodejs=22 - export PATH="$MAMBA_ROOT_PREFIX/envs/node-env/bin:$PATH" - - emcmake cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DXEUS_CPP_EMSCRIPTEN_WASM_BUILD=ON \ - -DCMAKE_FIND_ROOT_PATH=$PREFIX \ - -DSYSROOT_PATH=$SYSROOT_PATH \ - -DCMAKE_COMPILE_WARNING_AS_ERROR=ON \ - .. - - emmake make check-xeus-cpp -j ${{ env.ncpus }} - emmake make -j ${{ env.ncpus }} install - - - name: Test Emscripten xeus-cpp in browser - shell: bash -l {0} - run: | - set -e - cd build/test - # Fresh install browsers, and run Emscripten tests in them - # This is to match the Emscripten build instructions, where - # we run in a fresh browser, to stop any extra installed - # stuff interferring with the running of the tests - # Explaination of options for emrun - # --browser (name of browser on path) - # --kill_exit makes it so that when emrun finishes, - # that the headless browser we create is killed along with it - # --timeout 60 is such that emrun is killed after 60 seconds if - # still running. emrun should have finished long before then, - # so if it is still running, something went wrong (such as a test - # which crashed the html file). This will cause the ci to fail, - # as a non 0 value of will be returned. - # In the case of Chrome we have the extra --no-sandbox flag, as on - # Ubuntu Chrome will refuse to run otherwise, as it expects to have - # been installed with admin privileges. This flag allows it to run - # in userspace. - os="${{ matrix.os }}" - if [[ "${os}" == "macos"* ]]; then - # Install Firefox - wget "https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" -O Firefox-latest.dmg - hdiutil attach Firefox-latest.dmg - cp -r /Volumes/Firefox/Firefox.app $PWD - hdiutil detach /Volumes/Firefox - cd ./Firefox.app/Contents/MacOS/ - export PATH="$PWD:$PATH" - cd – - - # Install Google Chrome - wget https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg - pkgutil --expand-full googlechrome.pkg google-chrome - cd ./google-chrome/GoogleChrome.pkg/Payload/Google\ Chrome.app/Contents/MacOS/ - export PATH="$PWD:$PATH" - cd – - - # Run tests in browsers - echo "Running test_xeus_cpp in Firefox" - python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="firefox" --kill_exit --browser-args="--headless" test_xeus_cpp.html - echo "Running test_xeus_cpp in Google Chrome" - python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="Google Chrome" --kill_exit --browser-args="--headless" test_xeus_cpp.html - else - # Install Google Chrome - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb - dpkg-deb -x google-chrome-stable_current_amd64.deb $PWD/chrome - cd ./chrome/opt/google/chrome/ - export PATH="$PWD:$PATH" - cd - - - # Install Firefox - wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-x86_64/en-GB/firefox-138.0.1.tar.xz - tar -xJf firefox-138.0.1.tar.xz - cd ./firefox - export PATH="$PWD:$PATH" - cd - - - # Run tests in browsers - echo "Running test_xeus_cpp in Firefox" - python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" test_xeus_cpp.html - echo "Running test_xeus_cpp in Google Chrome" - python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" test_xeus_cpp.html - fi - timeout-minutes: 4 - - - name: Jupyter Lite integration - shell: bash -l {0} - run: | - micromamba create -n xeus-lite-host jupyterlite-core=0.6 jupyter_server jupyterlite-xeus -c conda-forge - micromamba activate xeus-lite-host - jupyter lite build \ - --XeusAddon.prefix=${{ env.PREFIX }} \ - --XeusAddon.mounts="${{ env.PREFIX }}/share/xeus-cpp/tagfiles:/share/xeus-cpp/tagfiles" \ - --XeusAddon.mounts="${{ env.PREFIX }}/etc/xeus-cpp/tags.d:/etc/xeus-cpp/tags.d" \ - --contents README.md \ - --contents notebooks/xeus-cpp-lite-demo.ipynb \ - --contents notebooks/smallpt.ipynb \ - --contents notebooks/images/marie.png \ - --contents notebooks/audio/audio.wav \ - --output-dir dist - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: ./dist - - deploy: - needs: build - if: github.ref == 'refs/heads/main' - permissions: - pages: write - id-token: write - - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - - runs-on: ubuntu-24.04 - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 From c4be0c6983870e5d86ddf8a94ed859654ff92e95 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:52:23 +0000 Subject: [PATCH 30/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index d632d3b6..f4fad0e3 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -3,7 +3,7 @@ import time def main(): - pyautogui.moveTo(1000, 10, duration=1) + pyautogui.moveTo(900, 30, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From 06fa0ea7ac9e1b1de16008d9977a5c0c303f64f1 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:55:18 +0000 Subject: [PATCH 31/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index f4fad0e3..47712d34 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -3,7 +3,7 @@ import time def main(): - pyautogui.moveTo(900, 30, duration=1) + pyautogui.moveTo(100, 700, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From 10718fbc173033fe7249bc8d3f2705770b1d8acc Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:57:09 +0000 Subject: [PATCH 32/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 47712d34..f516f08d 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -3,7 +3,7 @@ import time def main(): - pyautogui.moveTo(100, 700, duration=1) + pyautogui.moveTo(150, 720, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From e11b6410d721d31aaff19f77a59f77f6b1ac1759 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 19:59:23 +0000 Subject: [PATCH 33/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index f516f08d..08fcd268 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -6,6 +6,7 @@ def main(): pyautogui.moveTo(150, 720, duration=1) pyautogui.click() time.sleep(1) + pyautogui.hotkey('command', ',') output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 4a6cdaff7e1d93dd9d5ad961f255ee10cade66ff Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:02:14 +0000 Subject: [PATCH 34/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 08fcd268..110e0213 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -6,7 +6,9 @@ def main(): pyautogui.moveTo(150, 720, duration=1) pyautogui.click() time.sleep(1) - pyautogui.hotkey('command', ',') + pyautogui.moveTo(50, 50, duration=1) + pyautogui.click() + time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 3192eb5ec0a38b3408546bf5ec3117c709de95d5 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:04:02 +0000 Subject: [PATCH 35/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 110e0213..e41cf677 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -6,7 +6,7 @@ def main(): pyautogui.moveTo(150, 720, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(50, 50, duration=1) + pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From 0285c0c558cfd0a047d79155833bf7e3ba051816 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:06:18 +0000 Subject: [PATCH 36/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index e41cf677..3b0da03a 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,6 +9,9 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) + pyautogui.moveTo(60, 50, duration=1) + pyautogui.click() + time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 71ff47749c7bdfe5ddc908a34cf20f98aa9b6e16 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:09:17 +0000 Subject: [PATCH 37/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 3b0da03a..587c4b6c 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(60, 50, duration=1) + pyautogui.moveTo(60, 180, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From b3c2851d147516829c2464dcf8a195122ebb312a Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:11:27 +0000 Subject: [PATCH 38/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 587c4b6c..3a492f11 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(60, 180, duration=1) + pyautogui.moveTo(60, 100, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From 21432aceedcbfb599e3a33620fd0bf0ba7864581 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:14:27 +0000 Subject: [PATCH 39/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 3a492f11..ec6374b1 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(60, 100, duration=1) + pyautogui.moveTo(70, 90, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From ac86cec12092c66ef9e46e6203556226950caabf Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:16:12 +0000 Subject: [PATCH 40/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index ec6374b1..75fbd7e7 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(70, 90, duration=1) + pyautogui.moveTo(70, 95, duration=1) pyautogui.click() time.sleep(1) output_file = "screenshot.png" From b77b3d1034de90c2d53d5de4bf50e46b19067ed3 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:18:39 +0000 Subject: [PATCH 41/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 75fbd7e7..84c1a2f3 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -10,7 +10,6 @@ def main(): pyautogui.click() time.sleep(1) pyautogui.moveTo(70, 95, duration=1) - pyautogui.click() time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 1bf1b06fc262ed45e76fd9001f0c682a540fb5b2 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:20:54 +0000 Subject: [PATCH 42/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 84c1a2f3..0bac6454 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(70, 95, duration=1) + pyautogui.moveTo(70, 97, duration=1) time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From df8f07a40e85f61cfddaffed57cfa31169a8aab5 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:22:41 +0000 Subject: [PATCH 43/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 0bac6454..5b5ef3af 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(70, 97, duration=1) + pyautogui.moveTo(72, 97, duration=1) time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From b49614f753a4e867b86637040868b247322d02b0 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:24:36 +0000 Subject: [PATCH 44/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 5b5ef3af..26f6e709 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(72, 97, duration=1) + pyautogui.moveTo(75, 97, duration=1) time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From afb5c99fdf18f5e4c839acdd4e105e1b25e613d0 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:26:19 +0000 Subject: [PATCH 45/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 26f6e709..9eebd912 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(75, 97, duration=1) + pyautogui.moveTo(95, 97, duration=1) time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From b9871233a12cb5087402e57dbb6cebf4c869e538 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:28:03 +0000 Subject: [PATCH 46/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 9eebd912..48cade18 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(95, 97, duration=1) + pyautogui.moveTo(125, 97, duration=1) time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 9eebd4dcec72957cf6a5a107353f29a34f7a10c6 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:34:04 +0000 Subject: [PATCH 47/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 48cade18..bfea31b8 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(125, 97, duration=1) + pyautogui.moveTo(75, 99, duration=1) time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 417f737015672e0a71352d2025ef7ee86bd36c13 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:35:55 +0000 Subject: [PATCH 48/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index bfea31b8..91baeaa4 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -9,7 +9,7 @@ def main(): pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) - pyautogui.moveTo(75, 99, duration=1) + pyautogui.moveTo(75, 102, duration=1) time.sleep(1) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From dc529ac50f778631b3cf3fb4ac7e24464ea87e35 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:37:55 +0000 Subject: [PATCH 49/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 91baeaa4..26da32f4 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -10,7 +10,8 @@ def main(): pyautogui.click() time.sleep(1) pyautogui.moveTo(75, 102, duration=1) - time.sleep(1) + pyautogui.click() + time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 24fe57022df5d32164e330f8339018a0b35e8887 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:40:48 +0000 Subject: [PATCH 50/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 26da32f4..b8a8c077 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -12,6 +12,8 @@ def main(): pyautogui.moveTo(75, 102, duration=1) pyautogui.click() time.sleep(1.2) + pyautogui.moveTo(10, 20, duration=1) + time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 961eaa3bd96736d08b9cedecaab6aa706a33a28a Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:43:53 +0000 Subject: [PATCH 51/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index b8a8c077..8e4d132c 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -14,6 +14,8 @@ def main(): time.sleep(1.2) pyautogui.moveTo(10, 20, duration=1) time.sleep(1.2) + pyautogui.moveTo(400, 500, duration=1) + time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 1d4aa13a20b52d76a1ce5932cd14db0cb00c60f9 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:46:01 +0000 Subject: [PATCH 52/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 8e4d132c..f4287932 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -14,7 +14,7 @@ def main(): time.sleep(1.2) pyautogui.moveTo(10, 20, duration=1) time.sleep(1.2) - pyautogui.moveTo(400, 500, duration=1) + pyautogui.moveTo(800, 250, duration=1) time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From c7804a8b33c0399df9e83c5ffb3f0a9829d68cda Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:48:05 +0000 Subject: [PATCH 53/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index f4287932..4e3904cf 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -14,7 +14,7 @@ def main(): time.sleep(1.2) pyautogui.moveTo(10, 20, duration=1) time.sleep(1.2) - pyautogui.moveTo(800, 250, duration=1) + pyautogui.moveTo(700, 240, duration=1) time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 0547d288fbc773f26ea5014a05f78490934318bd Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:50:18 +0000 Subject: [PATCH 54/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 4e3904cf..930b42ee 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -15,6 +15,7 @@ def main(): pyautogui.moveTo(10, 20, duration=1) time.sleep(1.2) pyautogui.moveTo(700, 240, duration=1) + pyautogui.click() time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From ef86fbf0fbff02941e16c993ba9700b7eaf1026f Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:52:46 +0000 Subject: [PATCH 55/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 930b42ee..807b3709 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -17,6 +17,9 @@ def main(): pyautogui.moveTo(700, 240, duration=1) pyautogui.click() time.sleep(1.2) + pyautogui.moveTo(350, 500, duration=1) + pyautogui.click() + time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 83af69b904340fe1fe9c87032452dc39f3812919 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:53:01 +0000 Subject: [PATCH 56/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 807b3709..61a3568a 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -18,7 +18,6 @@ def main(): pyautogui.click() time.sleep(1.2) pyautogui.moveTo(350, 500, duration=1) - pyautogui.click() time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 60a1102f9e962726569e61790ecaacecd4bba373 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:55:09 +0000 Subject: [PATCH 57/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 61a3568a..14b547cc 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -17,7 +17,7 @@ def main(): pyautogui.moveTo(700, 240, duration=1) pyautogui.click() time.sleep(1.2) - pyautogui.moveTo(350, 500, duration=1) + pyautogui.moveTo(350, 600, duration=1) time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From b07f23362b2ed50f9682a2c8d14bc0357f0b8c67 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 20:58:02 +0000 Subject: [PATCH 58/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 14b547cc..691510b0 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -17,7 +17,7 @@ def main(): pyautogui.moveTo(700, 240, duration=1) pyautogui.click() time.sleep(1.2) - pyautogui.moveTo(350, 600, duration=1) + pyautogui.moveTo(350, 630, duration=1) time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 0e4bd5bddbccc3bd352e1142b9327aec43fd0cdc Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 21:00:05 +0000 Subject: [PATCH 59/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 691510b0..79d55276 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -18,6 +18,7 @@ def main(): pyautogui.click() time.sleep(1.2) pyautogui.moveTo(350, 630, duration=1) + pyautogui.click() time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From f8450e0c1b910f91d792ad3f54cadb858c1640f0 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 21:05:48 +0000 Subject: [PATCH 60/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 79d55276..75842585 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -3,23 +3,32 @@ import time def main(): + # Click Safari icon pyautogui.moveTo(150, 720, duration=1) pyautogui.click() time.sleep(1) + # Click Safari Menu pyautogui.moveTo(60, 10, duration=1) pyautogui.click() time.sleep(1) + # Click Settings pyautogui.moveTo(75, 102, duration=1) pyautogui.click() time.sleep(1.2) + # This is done while waiting for settings page + # to appear pyautogui.moveTo(10, 20, duration=1) time.sleep(1.2) + # Click websites page of settings pyautogui.moveTo(700, 240, duration=1) pyautogui.click() time.sleep(1.2) + # Click Downloads section of webpages page pyautogui.moveTo(350, 630, duration=1) pyautogui.click() time.sleep(1.2) + pyautogui.moveTo(800, 670, duration=1) + time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 1fa9a48bf3924cfae188ead2d34d42ca50a69806 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 21:08:24 +0000 Subject: [PATCH 61/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 75842585..c61f8d22 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -27,7 +27,7 @@ def main(): pyautogui.moveTo(350, 630, duration=1) pyautogui.click() time.sleep(1.2) - pyautogui.moveTo(800, 670, duration=1) + pyautogui.moveTo(950, 680, duration=1) time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From 2faa63f9370fe9f3d82b3694d133840a4cd8723a Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 21:10:48 +0000 Subject: [PATCH 62/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index c61f8d22..b1f8536a 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -27,7 +27,8 @@ def main(): pyautogui.moveTo(350, 630, duration=1) pyautogui.click() time.sleep(1.2) - pyautogui.moveTo(950, 680, duration=1) + pyautogui.moveTo(950, 690, duration=1) + pyautogui.click() time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From fc0b2370acd7b291548becb45c342c8eb4202379 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 21:13:01 +0000 Subject: [PATCH 63/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index b1f8536a..b7189e6c 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -29,6 +29,7 @@ def main(): time.sleep(1.2) pyautogui.moveTo(950, 690, duration=1) pyautogui.click() + pyautogui.moveTo(950, 680, duration=1) time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From da6da86cb1184231d3783bd17409c7cae59a1511 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 21:15:14 +0000 Subject: [PATCH 64/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index b7189e6c..7bfff853 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -29,7 +29,7 @@ def main(): time.sleep(1.2) pyautogui.moveTo(950, 690, duration=1) pyautogui.click() - pyautogui.moveTo(950, 680, duration=1) + pyautogui.moveTo(950, 670, duration=1) time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) From de39d94becbe1679a28e165a5517a15059b39649 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 21:17:38 +0000 Subject: [PATCH 65/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index 7bfff853..a9f36a58 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -27,13 +27,14 @@ def main(): pyautogui.moveTo(350, 630, duration=1) pyautogui.click() time.sleep(1.2) + # Change ask to allow pyautogui.moveTo(950, 690, duration=1) pyautogui.click() pyautogui.moveTo(950, 670, duration=1) + pyautogui.click() time.sleep(1.2) output_file = "screenshot.png" subprocess.run(["screencapture", "-C", output_file]) - if __name__ == "__main__": main() From e7a86fd3abfefd15c83d7de453c906be70d5b63e Mon Sep 17 00:00:00 2001 From: mcbarton Date: Sun, 23 Nov 2025 21:19:58 +0000 Subject: [PATCH 66/66] Update automated-notebook-run-script.py --- scripts/automated-notebook-run-script.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/automated-notebook-run-script.py b/scripts/automated-notebook-run-script.py index a9f36a58..2afec7fc 100644 --- a/scripts/automated-notebook-run-script.py +++ b/scripts/automated-notebook-run-script.py @@ -14,11 +14,11 @@ def main(): # Click Settings pyautogui.moveTo(75, 102, duration=1) pyautogui.click() - time.sleep(1.2) + time.sleep(2.4) # This is done while waiting for settings page # to appear - pyautogui.moveTo(10, 20, duration=1) - time.sleep(1.2) + #pyautogui.moveTo(10, 20, duration=1) + #time.sleep(1.2) # Click websites page of settings pyautogui.moveTo(700, 240, duration=1) pyautogui.click()