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()方法。