Appium android按钮点击不起作用?

时间:2016-07-07 07:02:59

标签: android appium

尝试使用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();
    }

5 个答案:

答案 0 :(得分:1)

当然测试将通过,因为您只是尝试单击“登录按钮”,除非您在单击“登录”按钮后添加一些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");

答案 1 :(得分:1)

我遇到了同样的问题。

请确保手机键盘不包含提交按钮(UI)。

如果涵盖,解决方案: 在运行单击[.click()]函数之前隐藏键盘。

键盘隐藏代码在这里How to dismiss the keyboard in appium using Java?

原因: Coz Appium使用x& y UI坐标单击该按钮,如果键盘覆盖了提交按钮,则单击键盘而不是按钮。

答案 2 :(得分:0)

建议使用

WebElement  login_button=  webDriver.findElement(By.id("btn_login")); //as used for other WebElement

另外我认为一般登录页面最好是登录可见,如果不是这样,你可能想要在页面上向下滚动而不是

wait.until(ExpectedConditions.visibilityOf(login_button));

PS - 如果您收到任何错误/异常,请发布此信息。请添加问题并告知。

答案 3 :(得分:0)

就我而言,我也尝试过类似的按钮单击,但没有结果。我意识到我没有点击正确的元素。

要验证我单击的内容,我已经打印了元素的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

我通过UI Automator Viewer,Android / Sdk / tools / bin / uiautomatorviewer应用程序获得的类名。

尽管如此,在获得列表之前,您可以临时使用Thread.sleep(5000);用您自己的值检查有关元素加载缓慢的假设,并在出现时间问题时根据需要使用适当的时间等待方法替换它。

有时,一个按钮可能具有多层结构,需要它才能获得可以单击的正确图层。就我而言,有两层。

答案 4 :(得分:0)

在您的键盘上隐藏“登录”按钮时,因此在隐藏键盘的同时,

driver.hidekeyboard();