无法在EditText字段中发送密钥

时间:2019-05-10 18:11:30

标签: java android selenium appium

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

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

这是我从鸦片检查员那里得到的肮脏的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字段中键入文本吗?

5 个答案:

答案 0 :(得分:4)

由于该元素位于Web视图中,因此您需要使用chrome / firefox查找html元素,因为android ui自动器无法检测到该元素。

要获取元素的html,您需要将设备与chrome连接,然后转到chrome://inspect,现在可以在您的应用中运行并打开webview,您可以在chrome://inspect中找到设备打开webview后,您需要从那里选择设备,然后您将看到webview的副本,从那里您可以检查元素并找到元素的html,并使用该html来获取xpath 。

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

答案 1 :(得分:3)

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

具有Appium移动命令功能。

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

答案 2 :(得分:0)

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

element.click();

之前

element.sendKeys();

答案 3 :(得分:0)

由于您能够找到该元素,但似乎无法与该元素进行交互,因此一种解决方法是改为使用其坐标。

  1. 单击坐标以将焦点设置在元素上。
  2. 输入键而不指定元素。

我没有Java经验,所以这里有一些伪代码可以让您大致了解:

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

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

答案 4 :(得分:0)

我曾经在输入文本字段时遇到问题,这有所帮助。

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