在自动化的许多努力后,无法findvalidation的Android本机应用程序

我正在做自动化的Android本地应用程序,并希望validation与文本的loginvalidation。 当我试图使用Appium检查员和Uiautomator来select它。 无法findvalidation部分,所以很难挑选它。

在这里输入图像说明

我试着从不同的论坛和Appium讨论的代码,但仍然无法通过自动化findvalidation。 我已经尝试了以下内容:

代码1

JavascriptExecutor js = (JavascriptExecutor)driver; WebElement field = driver.findElement(By.xpath("//android.widget.EditText[@text='Enter mobile number']")); // Boolean is_valid = (Boolean)js.executeScript("return arguments[0].checkValidity();", field); try { String message = (String) js.executeScript("return arguments[0].validationMessage;", field); } catch (Exception E) { 

输出:

exception:org.openqa.selenium.WebDriverException:方法尚未实现

代码2

 public boolean IsValidationFired() { if(driver.getPageSource().contains("Invalid")) { System.out.println("PASS"); } else { System.out.println("FAIL"); } } 

输出:

打印=失败

我不知道如果它是JavaScriptpopup或本机应用程序popup或吐司message.But期待检查它,并通过自动化validation。

更新

用于contactnu.setError("Invalid phone number.");validation的代码是: contactnu.setError("Invalid phone number.");

Solutions Collecting From Web of "在自动化的许多努力后,无法findvalidation的Android本机应用程序"

我从过去两年一直在做Android Apptesting自动化。 我多次遇到同样的问题。 不幸的是,uiAutomator没有检测到这些元素,所以我们不能对这些元素进行任何操作。

Appium在内部向uiAutomator发送命令,uiAutomatar在设备上执行操作。 如果uiAutomator看到这些元素,uiAutomator可以执行操作。

所以我build议你不要花太多的时间来使用java脚本或xPath,因为我已经尝试了软pipe解决scheme,但没有一个工作。

但是,有一个解决scheme非常冗长。 您可以从设备上截取屏幕截图,并在运行时将其存储在您的机器中,并检查文本是否为“无效的电话号码”。 在使用SIKULI的图像中可用。 或者,您可以要求开发人员将错误消息更改为uiAutomator中的某个可见组件。 希望这可以帮助你。

为什么不试图用正则expression式来search,比如:

 public boolean IsValidationFired() { try{ WebElement invalid = driver.findElement(By.xpath("//*[@text='Invalid phone number.']")); //You could check if @text contains just invalid Invalid //WebElement invalid = driver.findElement(By.xpath("//*[contains(@text, 'Invalid')]]")); if(invalid != null) { System.out.println("PASS"); } else { System.out.println("FAIL"); } }catch(NoSuchElementException ex){ System.out.println("Element not found"); } } 

无论如何,这不是一个很好的解决scheme(*在Xpath)…只是用它来testing。 search将是缓慢的…如果你发现元素,你将不得不做出更好的XPATH解决scheme…

注意:当你find你的元素后,找出是否是TextView,Toast,…我build议这样做:

 System.out.println(invalid.getAttribute("className")); //This will print something like: "android.widget.TextView"