Appium android按钮单击不起作用?

Posted

技术标签:

【中文标题】Appium android按钮单击不起作用?【英文标题】:Appium android button click not working? 【发布时间】:2016-11-09 09:51:38 【问题描述】:

尝试使用 appium for android 原生应用登录用例。但是按钮单击不起作用。但我通过了所有测试。也尝试使用移动驱动程序。

        @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();
    

【问题讨论】:

您如何证明点击无效?任何弹出窗口或错误都必须确认,不是吗? 我点击服务器。没有得到回应 能否请您分享服务器日志,在您的设备/模拟器中的应用程序上执行什么操作? 我应该得到登录成功作为回应。我不明白。 @nullpointer 我试过 TouchAction 还是不行。 【参考方案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");

【讨论】:

【参考方案2】:

我遇到了同样的问题。

请确保您的提交按钮(UI)没有被手机键盘覆盖。

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

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

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

【讨论】:

【参考方案3】:

在我的情况下,我也尝试过类似的按钮点击,但没有结果。我意识到我没有点击正确的元素。

为了验证我点击的是什么,我打印了元素的 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】:

建议使用

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

另外,我相信一般登录页面最好是让登录可见,如果不是这样,您可能希望在页面上执行向下滚动而不是

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

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

【讨论】:

未收到错误或异常但点击功能不起作用【参考方案5】:

由于您的键盘隐藏了登录按钮,所以隐藏键盘,

driver.hidekeyboard();

【讨论】:

以上是关于Appium android按钮单击不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

android appium单击“content-desc”属性不起作用

使用 codeceptJS 在 appium 中单击 Element 不起作用

Android Studio 3.1.2运行按钮不起作用

当我调用可见性时,Android 动画不起作用

Jquery按钮单击事件不起作用

Android 浮动按钮和高级 webview 不起作用