首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在自动化方面进行了许多努力后,无法找到android本机应用的验证

在自动化方面进行了许多努力后,无法找到android本机应用的验证
EN

Stack Overflow用户
提问于 2017-08-31 23:19:07
回答 2查看 1.2K关注 0票数 17

我正在做自动化的Android原生应用程序,并想验证与文本登录验证。当我尝试使用Appium检查器和Uiautomator来选择它时。两者都无法定位验证部分,因此很难选择它。

我尝试了来自不同论坛和Appium讨论的代码,但仍然无法通过自动化找到验证。我尝试过以下几种方法:

代码1

代码语言:javascript
复制
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) {

输出:

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

代码2

代码语言:javascript
复制
public boolean IsValidationFired() {
    if(driver.getPageSource().contains("Invalid")) {
        System.out.println("PASS");
    } else {
        System.out.println("FAIL");
    }
}

输出:

打印=失败

我不确定它是javascript弹出窗口,还是本地应用程序弹出窗口,还是希望通过自动化进行检查和验证的toast message.But。

更新

用于触发验证的代码是:contactnu.setError("Invalid phone number.");

EN

回答 2

Stack Overflow用户

发布于 2017-09-01 23:11:53

在过去的两年里,我一直在做Android App的自动化测试。我已经遇到过很多次同样的问题。不幸的是,uiAutomator没有检测到这些类型的元素,所以我们不能对这些元素执行任何操作。

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

所以我建议你不要花太多时间在使用java脚本或xPath上,因为我已经尝试过软管解决方案,但它们都不起作用。

然而,有一个解决方案非常冗长。您可以从设备上截取此屏幕的屏幕截图,并在运行时将其存储到您的计算机中,并检查文本是否为"Invalid phone number“。在使用SIKULI的图像中可用。或者,您可以要求开发人员将错误消息更改为uiAutomator中的某个可见组件。希望这对你有帮助。

票数 2
EN

Stack Overflow用户

发布于 2017-09-01 18:08:00

为什么不尝试使用正则表达式进行搜索,例如:

代码语言:javascript
复制
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");
       }
}

无论如何,这不是一个很好的解决方案(*在xpath中)...就用它来测试吧。搜索会很慢..。如果你找到了元素,你将不得不做一个更好的XPATH解决方案……

注意:找到元素后,要确定是否为TextView、Toast、...我建议这样做:

代码语言:javascript
复制
System.out.println(invalid.getAttribute("className"));
//This will print something like: "android.widget.TextView"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45984953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档