Android 安卓点击复选框

Android 安卓点击复选框,android,appium,Android,Appium,我正在使用appium创建自动化测试来测试android应用程序。我现在面临的问题是,我无法选择复选框,因为该复选框包含链接文本 我使用以下代码获取复选框元素并单击它- WebElement termsAndConditionsCheckbox = (new WebDriverWait(driver, 60)).until(ExpectedConditions.presenceOfElementLocated(By.id(baseTest.getAndroidElementId("checkbo

我正在使用appium创建自动化测试来测试android应用程序。我现在面临的问题是,我无法选择复选框,因为该复选框包含链接文本

我使用以下代码获取复选框元素并单击它-

WebElement termsAndConditionsCheckbox = (new WebDriverWait(driver, 60)).until(ExpectedConditions.presenceOfElementLocated(By.id(baseTest.getAndroidElementId("checkbox_terms_and_conditions"))));
termsAndConditionsCheckbox.click();
在应用程序代码中,复选框的文本设置如下-

mCheckboxTermsAndConditions.setText(Html.fromHtml(mSignUpAcceptTermsAndConditions));
mCheckboxTermsAndConditions.setMovementMethod(LinkMovementMethod.getInstance());
从android设备上的调试选项中,我打开了查看点击事件指针位置的选项,我看到appium点击在复选框的中心(框+文本),不幸的是,该点包含链接文本,因此启动webview,而不是“选中”复选框

我在appium中没有看到自定义的click(),这将允许我选中复选框


如有任何想法/帮助,将不胜感激

在这种情况下,不要直接单击复选框。首先获取复选框的位置,并通过添加/减去一些像素来调整位置,使其始终准确地单击复选框,而不是整个复选框元素的中心

您可以使用以下代码段:

    WebElement element =driver.findelement(By.xpath("YourXpath"));
        Point p=element.getLocation();
        driver.tap(1, p.getX()+10, p.getY()+10, 1);

您可以使用find元素
By.className
而不是
By.id

例如,对于多个这样的元素,可以使用索引引用它们(在本例中为0)

WebElement submit = (WebElement) driver.findElements(By.className(RADIO_BUTTON)).get(0);
submit.click();

希望这能有所帮助。

我使用uiautomatorviewer只查找复选框而不是文本,请分享uiautomatorviewer的屏幕截图,以便我们更好地理解。我可以找到它和getAttributes,但从未执行过单击。好的,经过一些尝试和错误后,我使用getX()+5和getY()+5成功地实现了这种方法。我认为如果可能的话,最好让编写UI的人将链接和文本放在一个单独的视图中。我在过去发现,在同一视图中,与复选框链接文本相关的其他选择问题也存在。