Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
setValue和sendKeys在使用Appium和Android的EditText中设置文本时抛出错误_Android_Android Edittext_Appium_Sendkeys_Setvalue - Fatal编程技术网

setValue和sendKeys在使用Appium和Android的EditText中设置文本时抛出错误

setValue和sendKeys在使用Appium和Android的EditText中设置文本时抛出错误,android,android-edittext,appium,sendkeys,setvalue,Android,Android Edittext,Appium,Sendkeys,Setvalue,为了测试我的LoginActivity,我尝试使用Appium和Android Studio在电子邮件Edittext中设置一个文本 我的第一个版本的测试包括WebDriver和EditText的Webelement,因此我使用sendKeys()来设置文本 代码如下: WebDriver driver; @Before public void testApp() throws MalformedURLException, InterruptedException { String a

为了测试我的
LoginActivity
,我尝试使用Appium和Android Studio在电子邮件
Edittext
中设置一个文本

我的第一个版本的测试包括
WebDriver
EditText
Webelement
,因此我使用
sendKeys()
来设置文本

代码如下:

WebDriver driver;

@Before
public void testApp() throws MalformedURLException, InterruptedException {
    String apkpath = "C:\\Users\\0013498\\Desktop\\qa-XXX-2-2-4-2.apk";
    File app = new File(apkpath);
    DesiredCapabilities capabilities= new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.BROWSER_NAME,"Android");
    capabilities.setCapability("deviceName","Emulator");
    capabilities.setCapability("platformName","Android");
    capabilities.setCapability("app",app.getAbsolutePath());
    capabilities.setCapability("appPackage", "com.XXX.XXX");
    capabilities.setCapability("appActivity", "com.XXX.XXX.SplashScreenActivity");
    driver = new AppiumDriver(new URL("http://127.0.0.1:4725/wd/hub"),capabilities);
    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

}


@Test
public void appiumExampleTest() throws Exception {
String path="//android.widget.EditText[contains(@resource-id,\"email\")]";
    click(path);
    elementSendText(path, "@");
}
public void click(String element) {
    WebElement webElement = driver.findElement(By.xpath(element));
    webElement.click();
    System.out.println("Click element: "+element+" index = "+0);

}


public void elementSendText(String element,  String text) {
    WebElement webElement = driver.findElement(By.xpath(element));
    webElement.sendKeys(text);

}
这是UI Automator Viewer针对
LoginActivity
的屏幕截图,其中电子邮件
EditText
为:

但是
sendKeys()
抛出以下错误:

org.openqa.selenium.WebDriverException: Not yet implemented.
org.openqa.selenium.WebDriverException:处理命令时发生未知的服务器端错误

因此,经过一些挖掘,我更改了代码,开始使用
AndroidDriver
AndroidElement
,如下所示:

AndroidDriver driver;
@Before
public void testApp() throws MalformedURLException, InterruptedException {
    String apkpath = "C:\\Users\\0013498\\Desktop\\qa-XXX-2-2-4-2.apk";
    File app = new File(apkpath);
    DesiredCapabilities capabilities= new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.BROWSER_NAME,"Android");
    capabilities.setCapability("deviceName","Emulator");
    capabilities.setCapability("platformName","Android");
    capabilities.setCapability("app",app.getAbsolutePath());
    capabilities.setCapability("appPackage", "com.XXX.XXX");
    capabilities.setCapability("appActivity", "com.XXX.XXX.SplashScreenActivity");       
    driver = new AndroidDriver(new URL("http://127.0.0.1:4725/wd/hub"),capabilities);//<----
    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

}
@Test
public void appiumExampleTest() throws Exception {
AndroidElement emailET= (AndroidElement)driver.findElementById("com.XXX.XXX:id/email");//<----
    emailET.click();//<----
    emailET.setValue("@");
}
老实说,我不知道如何前进,我被困在这里了。这不会那么难,我错过了什么

提前谢谢

编辑:

根据其中一个答案的要求,这是全部错误:

org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 77 milliseconds
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:48:19 -0700'
System info: host: 'PC0C283Q', ip: '192.168.0.101', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_76-release'
Driver info: io.appium.java_client.AppiumDriver
Capabilities [{app=C:\Users\0013498\Desktop\qa-XXX-2-2-4-2.apk, appPackage=com.XXX.XXX, networkConnectionEnabled=true, warnings={}, databaseEnabled=false, deviceName=WKS8DAV8GEYTQGB6, platform=LINUX, appActivity=com.XXX.XXX.SplashScreenActivity, desired={app=C:\Users\0013498\Desktop\qa-interview-2-2-4-2.apk, appPackage=com.XXX.XXX, appActivity=com.XXX.XXX.SplashScreenActivity, platformName=Android, deviceName=Emulator}, platformVersion=6.0, webStorageEnabled=false, locationContextEnabled=false, browserName=Android, takesScreenshot=true, javascriptEnabled=true, platformName=Android}]
Session ID: 3f61a37c-0f35-487c-be76-97154a8b6e04

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:216)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:168)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:635)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:274)
at io.appium.java_client.DefaultGenericMobileElement.execute(DefaultGenericMobileElement.java:45)
at io.appium.java_client.MobileElement.execute(MobileElement.java:1)
at io.appium.java_client.android.AndroidElement.execute(AndroidElement.java:1)
at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:98)
at com.cheerle.mongentesting01.test02.elementSendText(test02.java:150)
at com.cheerle.mongentesting01.test02.appiumExampleTest(test02.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
编辑:

也许build.gradle和这个问题有关

    apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "com.cheerle.mongentesting01"
    minSdkVersion 15
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.1'
    testCompile 'junit:junit:4.12'
    compile files('libs/java-client-5.0.0-BETA3.jar')
    compile files('libs/selenium-server-standalone-3.0.1.jar')
}
在本项目中:

另外,运行配置设置我的test02如下所示:

AndroidDriver driver;
@Before
public void testApp() throws MalformedURLException, InterruptedException {
    String apkpath = "C:\\Users\\0013498\\Desktop\\qa-XXX-2-2-4-2.apk";
    File app = new File(apkpath);
    DesiredCapabilities capabilities= new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.BROWSER_NAME,"Android");
    capabilities.setCapability("deviceName","Emulator");
    capabilities.setCapability("platformName","Android");
    capabilities.setCapability("app",app.getAbsolutePath());
    capabilities.setCapability("appPackage", "com.XXX.XXX");
    capabilities.setCapability("appActivity", "com.XXX.XXX.SplashScreenActivity");       
    driver = new AndroidDriver(new URL("http://127.0.0.1:4725/wd/hub"),capabilities);//<----
    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

}
@Test
public void appiumExampleTest() throws Exception {
AndroidElement emailET= (AndroidElement)driver.findElementById("com.XXX.XXX:id/email");//<----
    emailET.click();//<----
    emailET.setValue("@");
}

这是Appium服务器屏幕和配置:


这有帮助吗?

试试emailET.sendKeys(“@”);使用您发布的AndroidDriver代码。

单击EditText元素后。只需添加以下代码,而不是setValue或sendKeys代码

driver.getKeyboard().sendKeys("textToBeTyped");

它抛出错误:org.openqa.selenium.WebDriverException:处理命令时发生未知的服务器端错误。我复制了问题“上次编辑”中的错误,感谢您添加的是执行日志。你能上传Appium服务器日志吗。还有一个问题,你发布的登录屏幕,它是你应用程序的本机视图还是网络视图?截图很好。运行Appium服务器,执行代码,捕获Appium日志并上传。“这是Appium服务器屏幕和配置:”标题后的第一个屏幕截图,您发布了是。Appium logs>info:[debug][BOOTSTRAP][debug]Finding//android.widget.EditText[contains(@resource id,“email”)]使用上下文id为的XPATH:multiple:false>info:[debug][BOOTSTRAP][debug]返回结果:{“status”:7,“value”:“无法使用提供的策略找到元素。”}当我使用driver.getKeyboard()时;在我的第一版代码(使用WebDriver和WebElement)中,无法解析getKeyboard()方法。