Appium无法操作元素

时间:2017-08-18 11:42:09

标签: selenium appium

我正在使用下面的代码来测试带有Appium的Android应用程序,但是当我尝试操作该元素时

driver.findElementById("com.TdMobile.ipems_app:id/login_ipaddress_edit").sendKeys("http://192.168.0.71:8080/ipems/");   

我得到java.lang.NullPointerException,当我调试到该行时,我发现该元素不为空,是否有人知道这发生了?

AndroidDriver driver = null;
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability("automationName", "Appium");//appium做自动化
cap.setCapability("app", "C:\\Users\\baiming.zhang\\Desktop\\IPEMS-APP.apk");
cap.setCapability("deviceName", "xiaomi-mi_5");//设备名称
cap.setCapability("platformName", "Android"); //安卓自动化还是IOS自动化
cap.setCapability("platformVersion", "6.0"); //安卓操作系统版本
cap.setCapability("udid", "794b155c"); //设备的udid (adb devices 查看到的) 
cap.setCapability("unicodeKeyboard", "True"); //支持中文输入
cap.setCapability("resetKeyboard", "True"); //支持中文输入,必须两条都配置
cap.setCapability("noSign", "True"); //不重新签名apk
driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"),cap);//把以上配置传到appium服务端并连接手机
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//隐式等待

driver.findElementById("com.TdMobile.ipems_app:id/login_ipaddress_edit").sendKeys("http://192.168.0.71:8080/ipems/");//this line failed.
driver.findElementById("com.TdMobile.ipems_app:id/login_user_edit").sendKeys("http://192.168.0.71:8080/ipems/");
driver.findElementById("com.TdMobile.ipems_app:id/login_passwd_edit").sendKeys("http://192.168.0.71:8080/ipems/");
driver.findElementById("com.TdMobile.ipems_app:id/login_login_btn").click();

完整的堆栈跟踪是:

  

线程“main”中的异常java.lang.NullPointerException at   org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:275)     在   org.openqa.selenium.remote.RemoteWebElement.isDisplayed(RemoteWebElement.java:316)     在simple.CalculatorTest.main(CalculatorTest.java:47)

2 个答案:

答案 0 :(得分:1)

我将AndroidDriver更改为RemoteWebDriver,而不是我的工作正常

答案 1 :(得分:0)

最近版本 3.5.1 的Selenium更新似乎打破了Appium的java客户端。

更多信息here

虽然这个帖子引用了Appium的java客户端5.0.0-BETA9,但我知道至少版本4.1.x也被破坏了,因为它发生在我身上。

因此,目前的解决方法是强制selenium的版本为3.4.0,如下所示:

compile ('org.seleniumhq.selenium:selenium-api:3.4.0'){force = true}
compile ('org.seleniumhq.selenium:selenium-remote-driver:3.4.0'){force = true}
compile ('org.seleniumhq.selenium:selenium-support:3.4.0'){force = true}

它对我有用。