isClickable 与 Selendroid

isClickable with Selendroid

我正在 Selendroid 中寻找一种方法来获取在真实设备上运行的应用程序的当前视图转储。现在我知道,您可以使用

获取整个页面源代码
driver.getPageSource()

也就是我目前正在使用的。此方法为我提供了所有可见视图元素的 XML 格式层次结构,可以使用 XPath 对其进行解析。输出如下所示:

<?xml version="1.0" encoding="UTF-8"?>
 <views>
  <DecorView name="" label="" value="" ref="97bc5edf-6001-0c8a-3550-92822dfe3d55" id="" shown="true">
  <rect x="0" y="0" height="1920" width="1080" />
  <LinearLayout name="" label="" value="" ref="da84259b-f404-d100-7eb6-ed006469d60e" id="" shown="true">
     <rect x="0" y="0" height="1920" width="1080" />
     <ViewStub name="" label="" value="" ref="beb2dd1c-4a0e-25ef-26ff-30fa1eb628d0" id="action_mode_bar_stub" shown="false">
        <rect x="0" y="0" height="0" width="0" />
     </ViewStub>
    (...)

不幸的是,我只需要可以点击的元素。在 Android SDK 中,可以在视图上使用 isClickable 来检查是否有为其注册的点击侦听器。

是否可以使用 Selendroid 获取元素的 isClickable 属性?或者有没有其他方法可以使用 Selendroid 获取应用程序的当前视图转储,这将给我元素的 isClickable 属性值?

最后一件事:我正在做的是对应用程序的通用测试,我没有它的源代码。因此,我无法在运行时之前定义视图元素。这必须动态发生。

您应该使用像 uiautomatorviewer 这样的工具 [位于 SDK 工具文件夹中] 来手动检查进程。 Selendroid 不提供 "isClickable" 之类的功能,但您可以检查 "isEnabled" 或只是:

WebElement element = driver.findElement(/* ... */);
try{
element.click();
}catch(SelendroidException ex){
/* your listener for output */
}

或!

element = WebDriverWait(driver, 10).until(
ExpectedConditions.elementToBeClickable(/* way to identity element */));

是的..真的很难找到合适的方法来做到这一点。