我是appium和Java的新手,所以请多多包涵。
我正在尝试在模拟器上自动化应用程序。我可以检查UIAUTOMATORVIEWER下的元素,但是当我运行代码时,无法识别页面中的元素。该应用确实可以打开,但是无法识别元素。
这是被检查元素的属性: 类:android.widget.Button Content-desc:登录
这是运行时页面源代码的一部分,因为您可以看到页面中存在登录按钮:
这是我代码的要旨:
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
答案 0 :(得分:0)
我怀疑您的应用程序是否能够立即加载,很可能您需要引入WebDriverWait以便在特定时间段内查询应用程序中的指定元素。
因此更改此行:
driver.findElementByAccessibilityId("LOGIN").click();
对此:
new WebDriverWait(driver,30)
.until(ExpectedConditions
.elementToBeClickable(By.xpath("//android.widget.Button[@content-desc='LOGIN ']")))
.click();
答案 1 :(得分:0)
我认为该应用程序是混合应用程序,因此您需要包含 chromedriverExecutable 功能,通过识别适合模拟器中设备的驱动程序的位置,我在 android 8 上运行 Appium 时也遇到问题,因此尝试定位另一个版本并它会起作用。