Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

Method is not implemented at XCUITestDriver.closeWindow

未關閉
#1,692 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 5 天內回覆

還沒有人認領這個 Issue。

評估

難度
4/5
預估耗時
3-5 天
新手友好度
25/100
Issue 類型
缺陷
描述清晰度
需要釐清
活躍度
停滯
技術堆疊
ios, java
領域
mobile, testing-qa

研究方向

從回報的 LocalAppiumDriver.resetApp() 呼叫開始,並比較 Selenium 的 RemoteWebDriver.close 行為與 appium-xcuitest-driver/lib/commands/navigation.js 中的 XCUITestDriver.closeWindow。使用提供的 Java 設定在 iOS 14.5 上重現 close 命令,然後判斷在保留工作階段的情況下關閉應用程式的預期行為。

由索引模型根據 Issue 內容生成。

描述

Description

I'm doing a migration from Appium 7.3 to 8.0, but I have problems with closing the app without terminating the driver session with driver.close(), but the error occurs on execution

{"value":{"error":"unknown method","message":"Method is not implemented","stacktrace":"NotImplementedError: Method is not implemented\n at XCUITestDriver.closeWindow (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/lib/commands/navigation.js:49:11)\n at commandExecutor (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-base-driver/lib/basedriver/driver.js:335:9)\n at /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/async-lock/lib/index.js:137:12\n at AsyncLock._promiseTry (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/async-lock/lib/index.js:261:31)\n at exec (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/async-lock/lib/index.js:136:9)\n at AsyncLock.acquire (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/async-lock/lib/index.js:152:3)\n at XCUITestDriver.executeCommand (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-base-driver/lib/basedriver/driver.js:348:39)\n at XCUITestDriver.executeCommand (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/lib/driver.js:731:24)\n at AppiumDriver.executeCommand (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/lib/appium.js:563:36)\n at runMicrotasks (<anonymous>)\n at processTicksAndRejections (internal/process/task_queues.js:85:5)\n at asyncHandler (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-base-driver/lib/protocol/protocol.js:297:21)"}}

Environment

  • Serenity 3.2.4
  • Java 11 Correto
  • Appium 8.0.0:
  • Desktop MacOS BigSur
  • Mobile platformt ios 14.5 on iPhone 12 Pro Max:
  • Emulator:

Code To Reproduce Issue [ Good To Have ]

package lulobank.automation.frontend.utils.drivers;

import io.appium.java_client.AppiumDriver;
import net.thucydides.core.util.EnvironmentVariables;
import net.thucydides.core.util.SystemEnvironmentVariables;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Objects;

import static org.apache.commons.lang3.StringUtils.stripAccents;

public final class LocalAppiumDriver {

    private static final Logger logger = LoggerFactory.getLogger(LocalAppiumDriver.class);
    private AppiumDriver driver;
    private static LocalAppiumDriver currentDriver;

    private static String nameScenario;

    public static AppiumDriver mobile() throws IOException {

        DesiredCapabilities capabilities = new DesiredCapabilities();
        currentDriver = new LocalAppiumDriver();

        TargetExecution targetExecution = TargetExecution.getTargetExecution();
        String appiumUrl = targetExecution.getAppiumUrl();
        setCapabilities(targetExecution, capabilities);

        try {
            currentDriver.driver = new AppiumDriver(new URL(appiumUrl), capabilities);
        } catch (MalformedURLException e) {
            logger.error("MalformedURLException ", e);
        }

        return currentDriver.driver;
    }

    private static DesiredCapabilities setCapabilities(TargetExecution targetExecution, DesiredCapabilities capabilities) {
        targetExecution.capabilities.forEach(capabilities::setCapability);
        capabilities.setCapability("name", getScenarioName());
        return capabilities;
    }

    private static String getScenarioName() {
        return nameScenario;
    }

    public static void setScenarioName(String scenarioName) {
        nameScenario = stripAccents(scenarioName);
    }

    public static AppiumDriver getDriver() {
        return currentDriver.driver;
    }

    public static boolean isThePlatformIOS() {
        return Objects.requireNonNull(getDriver().getCapabilities().getPlatformName().name()).equalsIgnoreCase("ios");
    }

    public static boolean isTheAppiumConfigGRID() {
        EnvironmentVariables variables = SystemEnvironmentVariables.createEnvironmentVariables();
        String appiumConfig = variables.getProperty("appiumconfig");
        return appiumConfig.equalsIgnoreCase("grid");
    }

    public static void resetApp() {
        currentDriver.driver.close();
    }

}

Exception Stacktraces

org.openqa.selenium.UnsupportedCommandException: {"value":{"error":"unknown method","message":"Method is not implemented","stacktrace":"NotImplementedError: Method is not implemented\n    at XCUITestDriver.closeWindow (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/lib/commands/navigation.js:49:11)\n    at commandExecutor (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-base-driver/lib/basedriver/driver.js:335:9)\n    at /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/async-lock/lib/index.js:137:12\n    at AsyncLock._promiseTry (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/async-lock/lib/index.js:261:31)\n    at exec (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/async-lock/lib/index.js:136:9)\n    at AsyncLock.acquire (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/async-lock/lib/index.js:152:3)\n    at XCUITestDriver.executeCommand (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-base-driver/lib/basedriver/driver.js:348:39)\n    at XCUITestDriver.executeCommand (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/lib/driver.js:731:24)\n    at AppiumDriver.executeCommand (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/lib/appium.js:563:36)\n    at runMicrotasks (<anonymous>)\n    at processTicksAndRejections (internal/process/task_queues.js:85:5)\n    at asyncHandler (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-base-driver/lib/protocol/protocol.js:297:21)"}}
Command duration or timeout: 4 milliseconds
Build info: version: '4.1.3', revision: '7b1ebf28ef'
System info: host: 'LULO-C02F22WBMD6M.local', ip: 'fe80:0:0:0:1060:b35e:6b46:1412%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '11.6.4', java.version: '11.0.12'
Driver info: io.appium.java_client.AppiumDriver
Command: [ec885fd8-a0ae-45ad-9614-d8d34c868cde, close {}]
Capabilities {appium:app: Users/jortegon/Library/Deve..., appium:automationName: XCUITest, appium:databaseEnabled: false, appium:deviceId: , appium:deviceName: iPhone 12 Pro Max, appium:javascriptEnabled: true, appium:locationContextEnabled: false, appium:name: Onboarding desde PEP dilige..., appium:networkConnectionEnabled: false, appium:noReset: true, appium:platformVersion: 14.5, appium:shouldTerminateApp: true, appium:takesScreenshot: true, appium:udid: 59D95976-33E4-40DE-9C68-666..., appium:webStorageEnabled: false, platformName: ios}
Session ID: ec885fd8-a0ae-45ad-9614-d8d34c868cde

	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:217)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:169)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:602)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:622)
	at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:268)
	at org.openqa.selenium.remote.RemoteWebDriver.close(RemoteWebDriver.java:452)
	at lulobank.automation.frontend.utils.drivers.LocalAppiumDriver.resetApp(LocalAppiumDriver.java:72)
主要語言
Java
星號
1.3k
分支
755
平均合併
5 天 14 小時
30 天內合併 PR
8

環境準備

  • 沒有 Dockerfile 或 Docker Compose 檔案
  • 有 Pull Request 範本
  • 沒有貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

appium/java-client 的其他 Issue

查看 appium/java-client 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。