我正在进行Android原生应用的自动化,并希望通过文本验证登录验证。当我尝试使用Appium检查器和Uiautomator选择它时。两者都无法找到验证部分,因此很难选择它。
我尝试了来自不同论坛和Appium讨论的代码,但仍然无法通过自动化找到验证。我尝试过以下方法:
代码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) {
输出
异常:org.openqa.selenium.WebDriverException:方法还没有 已实施
代码2
public boolean IsValidationFired() {
if(driver.getPageSource().contains("Invalid")) {
System.out.println("PASS");
} else {
System.out.println("FAIL");
}
}
输出
打印=失败
我不确定它是javascript弹出窗口还是原生app弹出窗口或toast message.But要检查它并通过自动化验证。
更新
用于解雇验证的代码是:contactnu.setError("Invalid phone number.");
答案 0 :(得分:1)
过去两年我一直在做Android App测试自动化。我多次遇到同样的问题。不幸的是,uiAutomator没有检测到这些元素,因此我们无法对这些元素执行任何操作。
Appium在内部向uiAutomator发送命令,uiAutomatar在设备上执行操作。如果uiAutomator看到这些元素,uiAutomator可以执行操作。
所以我建议你不要花太多时间使用java脚本或xPath,因为我已经尝试过软管解决方案,但没有一个能够工作。
但是,有一种解决方案非常冗长。您可以从设备上截取此屏幕的屏幕截图,并在运行时将其存储到您的计算机中,并检查该文本是否为“无效的电话号码”。可以使用SIKULI在图像中找到。或者您可以要求开发人员将错误消息更改为uiAutomator中的某个可见组件。希望这会对你有所帮助。
答案 1 :(得分:0)
为什么不尝试使用正则表达式进行搜索,例如:
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,...我建议这样做:
System.out.println(invalid.getAttribute("className"));
//This will print something like: "android.widget.TextView"