【问题标题】:Unable to sendKeys in an EditText field无法在 EditText 字段中发送密钥
【发布时间】:2019-09-28 16:08:48
【问题描述】:

我在特定 EditText 字段中执行发送密钥时遇到问题。我尝试了一个脏的 xpath 和 id,但它仍然没有进入文本字段。但是我觉得找到元素没有问题。然而,它并没有点击进入元素。

所以在应用中发生的情况是,当用户选择页面时,它会打开一个 Web 视图,并且 EditText 字段位于该 WebView 中。

这是我从 appium 检查器那里得到的脏 xpath:

/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.support.v4.view.ViewPager/android.view.ViewGroup/android.widget.EditText[1]

这是一个不错的 ID:

@FindBy(id = "test_number")
public WebElement testNumberTextField;

我也尝试使用脏 xpath 使用 find by xpath。

这是我尝试输入文本的方法。您可以通过注释代码看到我也尝试了其他方法以使其正常工作,但仍然没有成功:

    public void enterTestNumber(){
    //List<WebElement> menu22 =drive.getDriver().findElements(By.className("android.widget.EditText"));
   // menu22.get(1).sendKeys(randomStringGeneratorMethods.randomAlphaNumericString(7));
    testPage.testNumberTextField.sendKeys(randomStringGeneratorMethods.randomAlphaNumericString(7));
    //js.executeScript("document.getElementById('"+testPage.testNumberTextField+").value='"+randomStringGeneratorMethods.randomAlphaNumericString(7)+"';");
    }

随机生成器只是一个随机字符串生成器,它是这样的:

public String randomAlphaNumericString(int characterLength) {
    return RandomStringUtils.randomAlphanumeric(characterLength);
}

有谁知道如何让它工作,以便它可以在这个 EditText 字段中输入文本?

【问题讨论】:

  • 您的 menu22 尺寸是多少?您收到testNumberTextField 的任何错误消息吗?
  • 它没有输出尺寸也没有给我一个错误。我尝试了 system.out.println 但没有输出。我可以尝试添加大小并运行它,但服务器现在一直关闭到星期一
  • 如果一个元素是“editText”,那么它就不会出现在 Web 视图中。如果这是一个原生或混合应用程序,请添加您的 UIAutomator 屏幕的屏幕截图,或者如果这是一个网络应用程序,请通过指向确切元素的 chrome 浏览器添加适当的 HTML 代码。
  • @Brucey 您对答案感到满意,或者您需要更多帮助或建议
  • 我意识到没有问题,它不起作用的原因是我必须在运行它之前进行 mvn clean 测试。它没有更新我的 sendKeys 代码,这就是它没有输入的原因。我以前不必做 mvn clean text 但现在看来我必须在运行测试之前做

标签: java android selenium appium


【解决方案1】:

由于元素在 webview 中,您需要使用 chrome/firefox 查找元素 html,因为 android ui automator 将无法检测到该元素。

要获取元素的html,您需要将您的设备与chrome连接并转到chrome://inspect,现在在您的应用程序中操作并打开webview,您将在chrome://inspect链接中找到您的设备webview被打开,你需要从那里选择你的设备,你会看到webview的副本,从那里你可以检查元素并找到元素的html,并使用该html你可以获得xpath。

现在您已经获得了 xpath,您只需现在将驱动程序从您的代码切换到 webview,然后您可以使用sendKeys() 方法在字段中输入值。

【讨论】:

    【解决方案2】:

    我没试过,但你可以发送 adb shell 命令输入文本。单击元素后。

    具有 Appium 移动命令功能。

    https://appium.io/docs/en/commands/mobile-command/

    【讨论】:

      【解决方案3】:

      如果页面加载后焦点不在文本文件中,则需要:

      element.click();
      

      之前

      element.sendKeys();
      

      【讨论】:

        【解决方案4】:

        由于您能够找到该元素,但似乎无法与之交互,因此可以使用其坐标来代替。

        1. 单击坐标将焦点设置在元素上。
        2. 在不指定元素的情况下输入键。

        我没有java经验,所以这里有一些伪代码给你一个大概的想法:

        item = driver.findElementByAccessibilityId("test_number");
        driver.Mouse.Click(item.coordinates);
        driver.pressKey(new KeyEvent(AndroidKey.ENTER));
        

        您可能需要迭代随机字符串并将 pressKey 函数放入该循环中以按下每个键。

        【讨论】:

          【解决方案5】:

          我曾经在文本字段输入方面遇到过问题,这很有帮助。

          driver.update_settings({"ignoreUnimportantViews":True})
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-04-27
            • 1970-01-01
            • 1970-01-01
            • 2016-04-13
            • 1970-01-01
            • 2020-07-30
            • 1970-01-01
            • 2017-05-24
            相关资源
            最近更新 更多