Chrome падает при загрузке изображения с использованием селена. Как это исправить? - PullRequest
0 голосов
/ 29 октября 2018

Я использую селен и appium для автоматизации мобильного браузера Chrome на телефоне Android. Я подключил реальное устройство Android через

adb connect {ip адрес мобильного телефона}

Все остальные тесты в браузере Android Chrome на реальном устройстве успешно выполняются. Но при загрузке изображения браузер падает.

Я использую код ниже для загрузки изображения

 public class UploadPhotoPage extends TestBase {

    // Page Factory Object Repository
    @FindBy(id = "file-upload")
    WebElement fileUpload;

    // Initialising the page object
    public UploadPhotoPage() {
    PageFactory.initElements(driver, this);
    }

    // Actions
    public void uploadphotos(String imagePath) throws AWTException, InterruptedException {
    fileUpload.sendKeys(imagePath);
    }
}

Путь к изображению находится на машине с Windows, где appium server и eclipse выполняют тестовые случаи.

Что здесь не так?

Журнал ошибок на сервере appium:

[W3C] Прокси драйвера активен, передача запроса через HTTP прокси [JSONWP Proxy] Сопоставил '/wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.6272871137575717-18/text' с именем команды 'getText' [JSONWP Proxy] Проксирует [GET /wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.6272871137575717-18/text] на [GET http://127.0.0.1:8003/wd/hub/session/adb1415c77099095355e619b36dc5e1e/element/0.6272871137575717-18/text] с телом: {} [JSONWP Proxy] Получил ответ со статусом 200: "{\" sessionId \ ": \" adb1415c77099095355e619b36dc5e1e \ ", \" status \ ": 10, \" value \ ": {\" message \ ": \" ссылка на устаревший элемент : элемент не прикреплен к документу страницы \ n (информация о сеансе: chrome = 70.0.3538.64) \ n (информация о драйвере: chromedriver = 2.42.591088 (7b2b2dca23cca0862f674758c9a3933e685c27d5), платформа = Windows NT 6.1.7601 SP1 x86_64) \ "}} " [W3C] Обнаружена внутренняя ошибка при выполнении команды: ProxyRequestError: Не удалось передать команду прокси на удаленный сервер. Исходная ошибка: запрос к /wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.6272871137575717-18/text не выполнен [W3C] в JWProxy.proxy $ (C: \ Users \ chintamanim \ AppData \ Local \ Programs \ Appium \ resources \ app \ node_modules \ appium \ node_modules \ appium-base-driver \ lib \ jsonwp-proxy \ proxy.js: 182: 13) [W3C] в tryCatch (C: \ Users \ chints \ AppData \ Local \ Programs \ Appium \ resources \ app \ node_modules \ appium \ node_modules \ babel-runtime \ Регенератор \ runtime.js: 67: 40) [W3C] в GeneratorFunctionPrototype.invoke [as _invoke] (C: \ Users \ chints \ AppData \ Local \ Programs \ Appium \ resources \ app \ node_modules \ appium \ node_modules \ babel-runtime \ Регенератор \ runtime.js: 315: 22 ) [W3C] в GeneratorFunctionPrototype.prototype. (Анонимная функция) [как следующий] (C: \ Users \ chints \ AppData \ Local \ Programs \ Appium \ resources \ app \ node_modules \ appium \ node_modules \ babel-runtime \ регенератор \ runtime. JS: 100: 21) [W3C] в GeneratorFunctionPrototype.invoke (C: \ Users \ chints \ AppData \ Local \ Programs \ Appium \ resources \ app \ node_modules \ appium \ node_modules \ babel-runtime \ Регенератор \ runtime.js: 136: 37) [W3C] в [MJSONWP] Соответствует коду ошибки 10 JSONWP к StaleElementReferenceError [HTTP] <- GET /wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.6272871137575717-18/text 404 95 мс - 2004 [HTTP] [HTTP] -> GET /wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.6272871137575717-18/text [HTTP] {} [W3C] Прокси драйвера активен, передача запроса через HTTP прокси [JSONWP Proxy] Сопоставил '/wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.6272871137575717-18/text' с именем команды 'getText' [JSONWP Proxy] Проксирует [GET /wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.6272871137575717-18/text] на [GET http://127.0.0.1:8003/wd/hub/session/adb1415c77099095355e619b36dc5e1e/element/0.6272871137575717-18/text] с телом: {} [JSONWP Proxy] Получил ответ со статусом 200: "{\" sessionId \ ": \" adb1415c77099095355e619b36dc5e1e \ ", \" status \ ": 10, \" value \ ": {\" message \ ": \" ссылка на устаревший элемент : элемент не прикреплен к документу страницы \ n (информация о сеансе: chrome = 70.0.3538.64) \ n (информация о драйвере: chromedriver = 2.42.591088 (7b2b2dca23cca0862f674758c9a3933e685c27d5), платформа = Windows NT 6.1.7601 SP1 x86_64) \ "}} " [W3C] Обнаружена внутренняя ошибка при выполнении команды: ProxyRequestError: Не удалось передать команду прокси на удаленный сервер. Исходная ошибка: запрос к /wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.6272871137575717-18/text не выполнен[W3C] в JWProxy.proxy $ (C: \ Users \ chints \ AppData \ Local \ Programs \ Appium \ resources \ app \ node_modules \ appium \ node_modules \ appium-base-driver \ lib \ jsonwp-proxy \ proxy.js: 182: 13) [W3C] в tryCatch (C: \ Users \ chints \ AppData \ Local \ Programs \ Appium \ resources \ app \ node_modules \ appium \ node_modules \ babel-runtime \ Регенератор \ runtime.js: 67: 40) [W3C] в GeneratorFunctionPrototype.invoke [as _invoke] (C: \ Users \ chints \ AppData \ Local \ Programs \ Appium \ resources \ app \ node_modules \ appium \ node_modules \ babel-runtime \ Регенератор \ runtime.js: 315: 22 ) [W3C] в GeneratorFunctionPrototype.prototype. (Анонимная функция) [как следующий] (C: \ Users \ chints \ AppData \ Local \ Programs \ Appium \ resources \ app \ node_modules \ appium \ node_modules \ babel-runtime \ регенератор \ runtime. JS: 100: 21) [W3C] в GeneratorFunctionPrototype.invoke (C: \ Users \ chints \ AppData \ Local \ Programs \ Appium \ resources \ app \ node_modules \ appium \ node_modules \ babel-runtime \ Регенератор \ runtime.js: 136: 37) [W3C] в [MJSONWP] Соответствует коду ошибки 10 JSONWP к StaleElementReferenceError [HTTP] <- GET /wd/hub/session/34e405a5-1bad-4711-9e1c-956e2d7391f6/element/0.6272871137575717-18/text 404 135 мс - 2004 </p>

Ниже приведены возможности, которые я установил

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
        capabilities.setCapability("deviceName", "ONEPLUS A5010");
        capabilities.setCapability("platformVersion", "8.1.0");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("browserName", "Chrome");
        capabilities.setCapability("deviceId", "XXX.XX.XX.XXX:5555");
        capabilities.setCapability("autoGrantPermissions", true);

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Проблемы с моим сценарием, как показано ниже 1) Проблема устаревшего элемента связана с другим элементом, поэтому она не была основной причиной. 2) Путь к изображению должен быть с мобильного изображения, а не на рабочем столе. Это была серьезная проблема.

0 голосов
/ 29 октября 2018

Одно быстрое решение для обработки StaleElementException состоит в том, чтобы снова найти тот же элемент в DOM, как только мы столкнемся с Exception для этого WebElement

 public class UploadPhotoPage extends TestBase {

// Page Factory Object Repository
@FindBy(id = "file-upload")
WebElement fileUpload;

// Initialising the page object
public UploadPhotoPage() {
PageFactory.initElements(driver, this);
}

// Actions
public void uploadphotos(String imagePath) throws AWTException, InterruptedException {
try {
fileUpload.sendKeys(imagePath);
}
catch(StaleElementException ste){
driver.findElement(By.id("file-upload")).sendKeys(imagePath);
}
    }
}
...