|
7 | 7 | [clojure.edn :as edn] |
8 | 8 | [clojure.java.io :as io] |
9 | 9 | [clojure.java.shell :as shell] |
| 10 | + [clojure.set :as cset] |
10 | 11 | [clojure.string :as str] |
11 | 12 | [clojure.test :refer [deftest is testing use-fixtures]] |
12 | 13 | [etaoin.api :as e] |
|
686 | 687 | (deftest test-switch-window-next |
687 | 688 | (let [init-handle (e/get-window-handle *driver*)] |
688 | 689 | (dotimes [n 3] |
689 | | - ;; press enter on link instead of clicking (safaridriver is not great with click) |
690 | | - (e/fill *driver* :switch-window k/return) |
691 | | - ;; Wait for new window to show up |
692 | | - (e/wait-predicate |
693 | | - (fn [] (= (+ 1 (inc n)) (count (e/get-window-handles *driver*)))) |
694 | | - {:timeout 30 |
695 | | - :interval 0.1 |
696 | | - :message (format "Timeout waiting for window #%d to be created" |
697 | | - (+ n 2))}) |
698 | | - ;; compensate: safari navigates to target window, others stay at source |
699 | | - (e/when-safari *driver* |
700 | | - (e/switch-window *driver* init-handle) |
701 | | - ;; Wait for window switch to "settle" before clicking again |
702 | | - (e/wait-predicate |
703 | | - (fn [] (= init-handle (e/get-window-handle *driver*))) |
704 | | - {:timeout 30 |
705 | | - :interval 0.1 |
706 | | - :message (format "Timeout waiting for window switch")}))) |
| 690 | + (let [old-handles (e/get-window-handles *driver*)] |
| 691 | + ;; press enter on link instead of clicking (safaridriver is not great with click) |
| 692 | + (println "clicking switch-window link on h" (e/get-window-handle *driver*)) |
| 693 | + (e/fill *driver* :switch-window k/return) |
| 694 | + ;; Wait for new window to show up |
| 695 | + (println "waiting for new handle to be created") |
| 696 | + (e/wait-predicate |
| 697 | + (fn [] (= (+ 1 (inc n)) (count (e/get-window-handles *driver*)))) |
| 698 | + {:timeout 30 |
| 699 | + :interval 0.1 |
| 700 | + :message (format "Timeout waiting for window #%d to be created" |
| 701 | + (+ n 2))}) |
| 702 | + (e/when-safari *driver* |
| 703 | + ;; anomaly last checked: 2025-08-09 |
| 704 | + ;; other drivers stay on source window and return handle for source window |
| 705 | + ;; safari, navigates to target window but returns handle for source window, which confuses it |
| 706 | + (let [new-handles (e/get-window-handles *driver*) |
| 707 | + new-handle (first (cset/difference (set new-handles) (set old-handles)))] |
| 708 | + ;; tell safari to switch to the window it is displaying |
| 709 | + (e/switch-window *driver* new-handle) |
| 710 | + ;; give it some time |
| 711 | + (e/wait-predicate |
| 712 | + (fn [] (= new-handle (e/get-window-handle *driver*))) |
| 713 | + {:timeout 30 |
| 714 | + :interval 0.1 |
| 715 | + :message (format "Timeout waiting for window switch to new-handle")}) |
| 716 | + ;; tell safari to switch to the inital window |
| 717 | + (e/switch-window *driver* init-handle) |
| 718 | + ;; give it some time |
| 719 | + (e/wait-predicate |
| 720 | + (fn [] (= init-handle (e/get-window-handle *driver*))) |
| 721 | + {:timeout 30 |
| 722 | + :interval 0.1 |
| 723 | + :message (format "Timeout waiting for window switch to init-handle")}))))) |
707 | 724 | (is (= 4 (count (e/get-window-handles *driver*))) "4 windows now exist") |
708 | 725 | (is (= init-handle (e/get-window-handle *driver*)) "on first window") |
709 | 726 | (dotimes [_ 3] |
|
0 commit comments