尝试使用appium for android native app登录用例。但按钮点击不起作用。但是我已经通过了所有的测试。还带着移动驱动程序。
@BeforeClass
public static void setUp() throws MalformedURLException
{
DesiredCapabilities capabilities=new DesiredCapabilities();
capabilities.setCapability("BROWSER_NAME","Chrome");
capabilities.setCapability("VERSION","4.3");
capabilities.setCapability("deviceName","SGH-T999L");
capabilities.setCapability("platformName","Android");
capabilities.setCapability("appPackage","org.odk.collect.android");
capabilities.setCapability("appActivity","com.fieldforce.android.activities.LoginActivity");
webDriver=new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
// webDriver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
}
@Test
public void testLogin() throws Exception
{
// webDriver.switchTo().window("NATIVE_APP");
WebDriverWait wait = new WebDriverWait(webDriver, 10);
WebElement userName= webDriver.findElement(By.id("txt_username"));
userName.sendKeys("733894");
WebElement password= webDriver.findElement(By.id("txt_password"));
password.sendKeys("Pass@123");
WebElement login_button= webDriver.findElement(By.id("org.odk.collect.android:id/btn_login"));
wait.until(ExpectedConditions.visibilityOf(login_button));
login_button.click();
}
@AfterClass
public static void tearDown()
{
webDriver.quit();
}
当然测试将通过,因为您只是尝试单击“登录按钮”,除非您在单击“登录”按钮后添加一些Assert
,否则它是否应该通过或失败对您的测试用例无关紧要。
点击登录后尝试添加一些等待
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
然后尝试在@test
中为方法testLogin断言,最后在下面添加两个语句,并使它们与登录后获得的定位器兼容
Actualtext = driver.findElement(By.xpath("locator to verify after login")).getText();
Assert.assertEquals(Actualtext, "assert Text");
我遇到了同样的问题。
请确保您的提交按钮(UI)未被手机键盘覆盖。
如果它涵盖,解决方案:在运行单击[.click()]功能之前隐藏键盘。
键盘隐藏代码在这里How to dismiss the keyboard in appium using Java?
原因:Coz Appium使用x和y UI坐标单击按钮,如果键盘覆盖了提交按钮,则单击键盘而不是按钮。
建议使用
WebElement login_button= webDriver.findElement(By.id("btn_login")); //as used for other WebElement
另外我认为一般登录页面理想情况下应该可以登录,如果不是这样,你可能想要在页面上向下滚动而不是
wait.until(ExpectedConditions.visibilityOf(login_button));
PS - 如果您收到任何错误/异常,请发布此信息。请添加问题并告知。
在我的情况下,我也尝试过类似的按钮点击,没有结果。我意识到我没有点击正确的元素。
要验证我点击了什么,我打印了元素的Text和TagName:
List<MobileElement> views = driver.findElements(By.className ("android.widget.TextView"));
System.out.println("1: "+views.get(2).getText());
System.out.println("2: "+views.get(2).getTagName());
views.get(2).click();
产出是:
1:好的
2:android.widget.TextView
我的classNames我通过UI Automator Viewer,Android / Sdk / tools / bin / uiautomatorviewer应用程序获得。
虽然,在列表获取之前你可以暂时使用Thread.sleep(5000);使用您自己的值来检查有关慢速元素加载的假设,并在需要时间问题时使用适当的时间等待方法替换它。
有时按钮可能具有多层结构,并且需要获得可以单击的正确图层。在我的情况下有两层。