Разрешение на скачивание файла для appium chrome borwser - PullRequest
1 голос
/ 12 апреля 2019

Я выполняю тест appium на удаленном драйвере Android с браузером Chrome для загрузки URL-адресов. Некоторые из URL-адресов являются PDF-файлами, и Chrome просит сохранить эти файлы. и кажется, что chrome не имеет доступа к файловой системе для хранения этих файлов, что приводит к диалоговому окну, как показано ниже.

Пожалуйста, помогите мне пропустить этот диалог без ручного ввода.

File permission dialog

После нажатия continue откроется диалоговое окно фактических разрешений из Android.

Вот мой код инициализации возможностей appium

DesiredCapabilities caps = DesiredCapabilities.android();
    caps.setCapability("appiumVersion", "1.9.1");
    caps.setCapability("deviceName","Samsung Galaxy S9 Plus HD GoogleAPI Emulator");
    caps.setCapability("deviceOrientation", "portrait");
    caps.setCapability("browserName", "Chrome");
    caps.setCapability("platformVersion", "8.1");
    caps.setCapability("platformName","Android");
    caps.setCapability("autoAcceptAlerts", true);
    caps.setCapability("autoGrantPermissions", true);
    caps.setCapability("chromedriverArgs", "--allow-file-access-from-files");
    caps.setCapability("maxDuration", 10000);

и это фрагмент, который я использую для загрузки URL

        driver.navigate().to("http://kmmc.in/wp-content/uploads/2014/01/lesson2.pdf");

autoGrantPermission также не работает в этом случае, потому что Chrome уже установлен. Команда Appium уже отклонила эту проблему - https://github.com/appium/appium/issues/10008

Пожалуйста, помогите!

1 Ответ

1 голос
/ 13 апреля 2019

Действительно, мне было очень трудно найти решение, но в итоге я нашел обходной путь.

  • Лучшим обходным решением была бы переустановка пакета chrome. Я попробовал это, но я не смог запустить chrome после переустановки, так как у меня не было доступа к оболочке, и chromedriver жаловался. Поэтому я оставил этот трек.
  • Я пытался заполучить команду adb или mobile:changePermissions, но для этого вам нужно использовать флаг сервера --relaxed-security при запуске сервера, а saucelabs не предоставляет удобный интерфейс для запуска сервера с этим флагом.

В крайнем случае, я нашел решение здесь - https://stackoverflow.com/a/51241899/4675277. Но только этого было недостаточно, потому что это помогло мне исправить предупреждение chrome, но позже оно появилось с другим предупреждением с allow и deny, для которого мне помогло другое решение в том же вопросе. Так что это код, который я в конечном итоге использовал -

driver.navigate().to("http://kmmc.in/wp-content/uploads/2014/01/lesson2.pdf");
    String webContext = ((AndroidDriver)driver).getContext();
    Set<String> contexts = ((AndroidDriver)driver).getContextHandles();
    for (String context: contexts){
        if (context.contains("NATIVE_APP")){
            ((AndroidDriver)driver).context(context);
            break;
        }
    }
    driver.findElement(By.id("android:id/button1")).click();
    contexts = ((AndroidDriver)driver).getContextHandles();
    for (String context: contexts){
        if (context.contains("NATIVE_APP")){
            ((AndroidDriver)driver).context(context);
            break;
        }
    }
    driver.findElement(By.id("com.android.packageinstaller:id/permission_allow_button")).click();
    ((AndroidDriver)driver).context(webContext);

Это позволяет разрешить все необходимые разрешения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...