Как включить и использовать WebView for iOS Automation в Appium

Я пытаюсь автоматизировать гибридное приложение, используя Appium, разработанный Ionic2/Angular2/Typescript.

Когда я пытаюсь идентифицировать элемент, я вижу элемент в WebView в Appium Inspector, но когда я пытаюсь идентифицировать их с помощью скрипта, возникает ошибка.

An element could not be identified using given search parameter.

error: Invalid locator strategy: partial link text

Я пытаюсь идентифицировать elemnet через Xpath, name, linkText, но я не могу это сделать.

Я также включаю webview в возможностях, добавляя

capabilities.SetCapability("autoWebView", "true");

Я использую C# для автоматизации. Кто-нибудь может предоставить решение?

Когда я использую Xpath, он показывает неизвестную ошибку на стороне сервера при обработке команды (Исходная ошибка: connect ECONNREFUSED)

Выше ошибка отображается, когда я звоню var contextNames= driver.Contexts; после настройки вышеуказанной возможности. Мне также нужно установить возможность для браузера???

3 ответа

Две вещи:

1 обеспечивать setWebContentsDebuggingEnabled установлен в true в вашем коде веб-просмотра.

2 Прежде чем получить доступ к элементам веб-просмотра, переключите контекст и вернитесь после выполнения операций. Нечто похожее на приведенный ниже код в Java для переключения на WEBVIEW:

Set<String> contextNames = driver.getContextHandles();
String setContext = contextNames.toArray()[1].toString();
driver.context(setContext);// set context to WEBVIEW_com.my.package

Пожалуйста, прочитайте следующее для Что именно делает autoWebview?

Для клиента dot-net аналогичный код выглядит так:

var contextNames = driver.GetContexts(); //correction to your code 
driver.SetContext(contextNames[1]); // for webview_1, for native_view 0

Даже после использования

capabilities.SetCapability("autoWebView", "true");

Нам нужно получить доступ к прокси для обработки веб-просмотра

Set<String> contextNames = idriver.getContextHandles();

    System.out.println(contextNames);

    for (String contextName : contextNames) {
      if (contextName.contains("NATIVE_APP")) {
        Reporter.log("Reaching to Native App", true);
        idriver.context(contextName);
        idriver.findElementByName("Open").click();
        Reporter.log("Clicking Open to naviagte to Native APP", true);
      }
      else{
        Reporter.log("Not found", true);
      }
    }

или попробуй ру прокси для обработки webview - просто хак

Ру ниже на терминале

ios_webkit_debug_proxy -c abad62540cbfc9f2af5c154985420a856e:27753 -d

1) Первый вариант

Ниже приведенный код поможет обработать приложение Native для просмотра веб-страниц.

public void acceptalert(){
    Set<String> contextNames = idriver.getContextHandles();

    System.out.println(contextNames);

    for (String contextName : contextNames) {
      if (contextName.contains("NATIVE_APP")) {
        Reporter.log("Reaching to Native App", true);
        idriver.context(contextName);
        idriver.findElementByName("Open").click();
        Reporter.log("Clicking Open to naviagte to Native APP", true);
      }
      else{
        Reporter.log("Not found", true);
      }
    }
}

2) Второй вариант:

try {
            //idriver.context("WEBVIEW_2");

            Set<String> contextNames1 = idriver.getContextHandles();
            for (String winHandle : idriver.getWindowHandles())
            {
                if (winHandle.contains("WEBVIEW_24")){
                    ((AppiumDriver) idriver).context(winHandle);
                    System.out.println("Switched to " + winHandle);
                    idriver.switchTo().window(winHandle);
                    idriver.findElementByName("Open").click();
                }

                else if (winHandle.contains("NATIVE_APP")) {
                    ((AppiumDriver) idriver).context(winHandle);
                    idriver.switchTo().window(winHandle);
                    System.out.println("Switched to " + winHandle);
                }
            }

        } catch (Exception e) {

        }
Другие вопросы по тегам