使用Appium在运行时无法识别元素

时间:2019-06-21 01:21:28

标签: android selenium mobile appium

我是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

2 个答案:

答案 0 :(得分:0)

我怀疑您的应用程序是否能够立即加载,很可能您需要引入WebDriverWait以便在特定时间段内查询应用程序中的指定元素。

因此更改此行:

driver.findElementByAccessibilityId("LOGIN").click();

对此:

new WebDriverWait(driver,30)
        .until(ExpectedConditions
                .elementToBeClickable(By.xpath("//android.widget.Button[@content-desc='LOGIN ']")))
        .click();

更多信息:Explicit wait - Mobile Test Automation with Appium

答案 1 :(得分:0)

我认为该应用程序是混合应用程序,因此您需要包含 chromedriverExecutable 功能,通过识别适合模拟器中设备的驱动程序的位置,我在 android 8 上运行 Appium 时也遇到问题,因此尝试定位另一个版本并它会起作用。