我是appium和Java的新手,所以请耐心等待。
我正在尝试在模拟器上自动化应用程序。我能够检查 UIAUTOMATORVIEWER 下的元素,但是当我运行代码时,无法识别页面中的任何元素。应用程序确实打开,但无法识别元素。
这是被检查元素的属性:类: android.widget.Button内容描述:登录
这是运行时页面源代码的一部分,如您所看到的页面中存在登录按钮:
这是我代码的要点:
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
cap.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Google Pixel 2");
cap.setCapability(MobileCapabilityType.BROWSER_NAME,"");
cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.0");
cap.setCapability("automationName", "UiAutomator2");
cap.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.kruxanalytics.kruxmetrix");
cap.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, "com.kruxanalytics.kruxmetrix.MainActivity");
I have tried the following find element methods:
driver.findElementByAccessibilityId("LOGIN").click();
driver.findElement(By.xpath("//android.widget.Button[@content-desc='LOGIN']")).click();
Appium log mostly contains this:
[WD Proxy] Got an unexpected response: {"sessionId":"5f7bca9b-2e8b-46a7-9727-53a85e0d6df0","status":7,"value":"An element could not be located on the page using the given search parameters."}
[debug] [MJSONWP] Matched JSONWP error code 7 to NoSuchElementError
我认为该应用程序是混合的,因此您需要包含 chromedriver可执行文件 功能,通过在模拟器中识别适合该设备的驱动程序的位置,我在android 8上运行Appium时也遇到了问题,因此请尝试针对另一个版本,它将起作用。
我怀疑您的应用程序是否能够立即加载,很可能您需要引入WebDriverWait才能在特定时间跨度内查询应用程序的指定元素。
所以改变这一行:
driver.findElementByAccessibilityId("LOGIN").click();
对此:
new WebDriverWait(driver,30)
.until(ExpectedConditions
.elementToBeClickable(By.xpath("//android.widget.Button[@content-desc='LOGIN ']")))
.click();
详细信息:显式等待 - 使用 Appium 实现移动测试自动化