我在模拟移动应用程序中简单按钮(id = btn_sign_in)上的点击时遇到麻烦。我已经尝试了很多使用By.xpath,By.CLassname等的组合,但是我不断收到错误,如下所示。
首先,这是我的代码。
public class Firstflow {
static DesiredCapabilities dc = new DesiredCapabilities();
@SuppressWarnings("rawtypes")
static AndroidDriver driver;
static AppiumDriver <MobileElement> driver_App;
@SuppressWarnings("rawtypes")
public static void main(String[] args) throws MalformedURLException, InterruptedException{
dc.setCapability("deviceName", "emulator-5444");
dc.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.mol.molwallet.uat");
//dc.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, "com.mol.molwallet.module.start.UserGuidance.UserGuidanceActivity");
//dc.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, "com.mol.molwallet.module.login.SignPageActivity");
System.out.println(dc);
dc.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, "com.mol.molwallet.module.start.SplashActivity");
dc.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, "60");
dc.setCapability("noReset", "true");
driver_App = new AndroidDriver<MobileElement>(new URL("http://localhost:4723/wd/hub"), dc);
driver_App.setLogLevel(Level.INFO);
Thread.sleep(5000);
String gps = driver_App.getPageSource();
System.out.println(gps);
//driver.findElement(By.xpath("//div/child::*[normalize-space()='SKIP']")).click();
//driver.findElement(By.xpath("//android.widget.TextView[@text='SKIP']")).click();
Thread.sleep(1000);
//driver.findElement(By.xpath("//*[@text='LOG IN']")).click();
//driver.findElement(By.xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.Button[2]")).click();
driver_App.findElement(By.id("btn_sign_in")).click();
driver_App.findElement(By.xpath("//*[@text='Region']")).click();
driver_App.findElement(By.xpath("//*[@text='Malaysia']")).click();
driver_App.findElement(By.xpath("//*[@id='etAccount']")).sendKeys("123456");
driver_App.findElement(By.xpath("//*[@text='NEXT']")).click();
}
}
错误信息如下:
INFO: Executed: [f0d477cf-ac78-426a-b2a8-9e08a3443e86, findElement {using=id, value=btn_sign_in}]
Exception in thread "main" org.openqa.selenium.WebDriverException: Returned value cannot be converted to WebElement: {element-6066-11e4-a52e-4f735466cecf=1, ELEMENT=1}
Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 16:57:40'
System info: host: 'RZB-MY-041', ip: '192.168.60.194', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_211'
Driver info: driver.version: AndroidDriver
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:370)
at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:62)
at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:413)
at io.appium.java_client.DefaultGenericMobileDriver.findElementById(DefaultGenericMobileDriver.java:70)
at io.appium.java_client.AppiumDriver.findElementById(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.findElementById(AndroidDriver.java:1)
at org.openqa.selenium.By$ById.findElement(By.java:218)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)
at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:58)
at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1)
at Firstflow.main(Firstflow.java:45)
Caused by: java.lang.ClassCastException: java.util.HashMap cannot be cast to org.openqa.selenium.WebElement
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:368)
... 13 more
我在这里看到两个错误:
a)返回值不能转换为WebElement:{element-6066-11e4-a52e-4f735466cecf = 1,ELEMENT = 1}
b)java.util.HashMap无法转换为org.openqa.selenium.WebElement 在org.openqa.selenium.remote.RemoteWebDriver.findElement上
我正在使用Appium Server的元素检查器来获取元素的详细信息。附件是检查员结果的屏幕截图。
我尝试了很多findElement的语法,甚至没有将AndroidDriver更改为AppiumDriver。我真的希望这与库的任何升级或降级无关。顺便说一句,我正在使用Eclipse编写自动化测试,因此Build.gradle或Maven中没有依赖项。我只是希望对我应该使用哪种语法单击该元素提出建议。谢谢。
答案 0 :(得分:0)
我相信您还应该在驱动程序初始化例程中添加下一行:
dc.setCapability("automationName", "uiautomator2");
UIAutomator2是自动化Android 5或更高版本时应使用的自动化名称