Я думаю, что вы спускаетесь не в ту кроличью нору. Посмотрите на ваш код:
webDriver.switchTo().window(tabs.get(tabCount));
System.out.println(webDriver.getTitle());
Вы хотите, чтобы webDriver переключился на другое окно. А затем сделайте что-нибудь на этой вкладке. Но что, если между первой и второй строкой есть контекстный переключатель потоков ?!
Как в:
- нить A: делает
webDriver.switchTo()
- резьба B: делает
webDriver.switchTo()
- Тема A: печатает заголовок страницы
Очевидно, это приведет к условиям гонки! Конечно, вы можете добавить своего рода блокировку / синхронизацию, чтобы поток всегда переключался на вкладку и выполнял свою работу, при этом другой поток не мог обновлять объект webDriver за это время. Но это в основном сериализует ваше тестирование.
Короче говоря: объект webDriver
имеет внутреннее состояние. Ваш подход полностью игнорирует этот факт, поэтому невозможно предсказать, что именно будет делать ваш код.
Простым решением будет создание одного экземпляра WebDriver на поток, как предлагается в комментариях. Кроме того, для идеи, как сделать это по-другому, в соответствии с тем, как селен «думает» о параллельных тестах, см. здесь .