ElementNotInteractableException: элемент не взаимодействует: элемент имеет нулевой размер, появляется после обновления до chromedriver 83 - PullRequest
7 голосов
/ 25 мая 2020

Я использую следующее изображение docker для запуска моих тестов с огурцом:

https://hub.docker.com/r/selenium/standalone-chrome/

К сожалению, начиная с сегодняшнего дня кажется, что всякий раз, когда я запускаю свой тесты я получаю ошибки ниже. Они появляются в начале каждого теста. Не имеет значения, что я делаю на странице.

** 13:38:26 [exec] org.openqa.selenium.ElementNotInteractableException: элемент не взаимодействует: элемент имеет нулевой размер

13 : 38: 26 [exec] (Информация о сеансе: chrome = 83.0.4103.61) **

Я покопался и заметил, что версия хромированного драйвера была обновлена ​​с 81 до 83. Мне удалось исправить эту проблему, используя более старый образ docker из той ссылки docker, у которой есть chromedriver 81. Но если я снова попытаюсь использовать chromedriver 83, это не сработает.

Кто нибудь еще сталкивался с этим? Есть ли новый вариант chrome, который мне нужно добавить из-за обновления?

Ответы [ 7 ]

5 голосов
/ 01 июня 2020

Причина root этой проблемы в том, что Chrome не прокручивается до элемента за пределами области просмотра. Вместо этого Chrome пытается щелкнуть по нему за пределами области просмотра. Вот почему возникает проблема. Это определенно проблема с Chrome 83, потому что я не сталкивался с этим на Chrome 81.

Более того, у меня нет такой проблемы на машине Windows, она воспроизводится только на Linux (I ' m с использованием изображений selenoid docker).

Решение с щелчком через JS - не лучший вариант, потому что через JS вы можете щелкнуть в любом месте даже для некликабельных элементов (например, перекрытых другими объектами). Это небезопасная операция.

Вместо этого я бы предложил прокрутить до элемента до щелчка и после собственного щелчка (); он будет работать идеально.

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].scrollIntoView(true);", element);    
element.click();
3 голосов
/ 27 мая 2020

Я тоже получаю эту ошибку, я немного покопался, я обнаружил, что размер элемента содержит 0, например, элемент размером 200 x 0 даст вам эту ошибку, если вы хотите щелкнуть по нему. Это не ошибка docker, я получаю ее на локальном chrome 83.

Попробуйте щелкнуть элемент с помощью Javascript Executor:

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);
1 голос
/ 25 июня 2020

В итоге я использовал scrollIntoView () , что помогло (код ниже взят из теста Protractor):

// scroll to it
browser.executeScript('document.getElementById("targetID").scrollIntoView()');

browser.sleep(500);

// click it
element(by.id('targetID')).click();
1 голос
/ 22 июня 2020

В нашем случае причиной root была проблема CSS / HTML: привязка заключала в оболочку div и ожидалось, что она неявно получит размер по сравнению с размером этого дочернего элемента.

Предыдущие версии Chrome терпимо относился к этому, но начиная с версии 83 Chrome, похоже, стал строже в этом отношении.

Итак, в этом случае решение заключалось в изменении примерно такого:

<a href="http://example.org">
  <div class="class with style giving height and width">
    some content
  </div>
</a>

Примерно так:

<a href="http://example.org" class="class with style giving height and width">
  some content
</a>

Это действительно HTML5.

1 голос
/ 29 мая 2020

У меня была та же проблема, что и у вас, с обновлением драйвера chrome до 83, я смог обойти эту проблему.

 WebDriverWait wait = new WebDriverWait(this.Driver, TimeSpan.FromSeconds(10));
            var result = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.CssSelector(".btnSaveChanges")));
            ExcuteJquery("$j(\".btnSaveChanges div:contains('" + Text + "')\").click()");

Использование Jquery поможет вам получить доступ к этому

1 голос
/ 26 мая 2020

Я обошел это, используя аргумент --window-size, когда я использую chrome без головы. Например, chrome --headless --window-size=400,800.

Я не знаю, что изменилось и почему этого достаточно.

0 голосов
/ 16 июня 2020

Я обошел это, щелкнув дочерний элемент <input> внутри элемента, который предположительно имел нулевую ширину.

...