Как включить и использовать 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) {
}