我在执行特定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
字段中键入文本吗?
答案 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移动命令功能。
答案 2 :(得分:0)
如果页面加载后焦点不在文本文件中,则需要:
element.click();
之前
element.sendKeys();
答案 3 :(得分:0)
由于您能够找到该元素,但似乎无法与该元素进行交互,因此一种解决方法是改为使用其坐标。
我没有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})