Andrei у меня есть уточняющий вопрос про https://github.com/SeleniumHQ/selenium/issues/8133 правильно я понимаю, что даже если у вас уже есть веб-элемент, вы ссылку на драйвер не из него извлекаете, а берёте из threadlocal (или его аналога)? то есть с элементами вообще ничего нельзя делать в отдельных потоках, селенид сразу крашится? а если используется не статический селенид-драйвер?
Andrei у меня есть уточняющий вопрос про https://github.com/SeleniumHQ/selenium/issues/8133 правильно я понимаю, что даже если у вас уже есть веб-элемент, вы ссылку на драйвер не из него извлекаете, а берёте из threadlocal (или его аналога)? то есть с элементами вообще ничего нельзя делать в отдельных потоках, селенид сразу крашится? а если используется не статический селенид-драйвер?
1. Если используется нестатический SelenideDriver, то проблем не будет, конечно. 2. Если есть WebElement - я не уверен, может, и не будет проблем. Но обычно-то его нет, а есть SelenideElement. А он ищет элемент заново при каждом обращении.
В общем, как я и писал, на стороне селенида мы наверняка можем что-то улучшить - скажем, действительно не делать перепоиск, пока нет проблем. И брать вебдрайвер из вебэлемента.
дело в том, что тут недостаточно просто использовать ThreadLocal, у вас хитрость в том, что SelenideElementProxy использует не тот драйвер, в котором выполнялся поиск элемента, а драйвер, который соответствует текущему потоку
в стек-трейсе это хорошо видно, что сначала вызывается RemoteWebDriver$RemoteTargetLocator.frame — тут используется один драйвер, а потом для заворачивания найденного элемента используется другой драйвер — StaticDriver.getWebDriver
я бы предложил селенид исправить, было бы логично для заворачивания использовать тот же драйвер, который использовался для поиска. хотя бы потому, что это логично