ОШИБКА: gl_surface_egl. cc (668)] Сообщение драйвера EGL (Ошибка) eglQueryDeviceAttribEXT: Ошибка неверного атрибута при использовании ActionChains из Selenium Python - PullRequest
0 голосов
/ 25 января 2020

когда я запускаю код:

for i in elementsList:
    action = ActionChains(driver)
    action.key_down(Keys.CONTROL).click(i).key_up(Keys.CONTROL).perform()

Это работает (да) и возвращает эту ошибку:

[0125/121353.774: ERROR:gl_surface_egl.cc(668)] EGL Driver message (Error) eglQueryDeviceAttribEXT: Bad attribute.

число "121353.774" не является постоянным, оно увеличивается с каждым раунд

Что не так?

1 Ответ

0 голосов
/ 27 января 2020

Это сообщение об ошибке ...

ERROR:gl_surface_egl.cc(668)] EGL Driver message (Error) eglQueryDeviceAttribEXT: Bad attribute.

... является сообщением DEBUG , которое означает, что произошла ошибка с одним из GL Switch


Эта ошибка определяется в gl_surface_egl. cc следующим образом:

static void EGLAPIENTRY LogEGLDebugMessage(EGLenum error,
                       const char* command,
                       EGLint message_type,
                       EGLLabelKHR thread_label,
                       EGLLabelKHR object_label,
                       const char* message) {
  std::string formatted_message = std::string("EGL Driver message (") +
                  GetDebugMessageTypeString(message_type) +
                  ") " + command + ": " + message;

Deep Dive

Аргумент --use-gl выбирает, какую реализацию GL следует использовать процессу GPU, и доступны следующие опции:

  • desktop : любой рабочий стол OpenGL, установленный пользователем (Linux и Ma c по умолчанию).
  • egl : независимо от того, какой EGL / GLES2 установлен пользователем (Windows по умолчанию - фактически ANGLE).
  • swiftshader : программный рендер SwiftShader.

Это сообщение DEBUG не является вредным, и вы можете продолжить свои тесты.


Дополнительные соображения

Однако, в соответствии с передовой практикой, если ваш сценарий использования включает в себя вызов click(), вам нужно вызвать WebDriverWait для element_to_be_clickable() следующим образом:

ActionChains(driver).key_down(Keys.CONTROL).click(i).key_up(Keys.CONTROL).perform()

В вашем сценарии использования при создании Списка вам нужно вызвать WebDriverWait для visibility_of_all_elements_located() следующим образом:

for i in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "elements_css"))):
    action = ActionChains(driver)
    action.key_down(Keys.CONTROL).click(i).key_up(Keys.CONTROL).perform()

Примечание : необходимо добавить следующие операции импорта:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

PS: 121353.774 in 0125/121353.774 является частичной отметкой времени


Outro

Возможно, эта ошибка вызвана тем, что приложение запускается на устройствах ES2-only, хотя манифесту требуется ES 3. Обновление EGL_RENDERABLE_TYPE с EGL_OPENGL_ES2_BIT до EGL_OPENGL_ES3_BIT решит эту проблему.

...