【发布时间】:2017-02-23 15:08:30
【问题描述】:
我有 Android 中的元素:
<android.support.design.widget.TextInputLayout
android:layout_width="-1"
android:layout_height="-2">
<AutoCompleteTextView
android:id="@ref/0x7f0c007c"
android:layout_width="-1"
android:layout_height="-2"
android:hint="@ref/0x7f060035"
android:maxLines="1"
android:singleLine="true"
android:inputType="0x21" />
</android.support.design.widget.TextInputLayout>
0x7f0c007c 的名称在 ids.xml 文件中是 password。
此TextInputLayout 位于LoginActivity 中,紧随SplashScreenActivity 之后。
这是我的测试课:
public class test02 {
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(10, TimeUnit.SECONDS);
//int KEYCODE_BACK Back key. Constant Value: 4
}
@Test
public void appiumExampleTest() throws Exception {
//WebElement emailEV=driver.findElement(By.id("com.XXX.XXX:id/email"));
//WebElement emailEV=driver.findElement(By.id("com.XXX.XXX.android:id/email"));
WebElement emailEV=driver.findElement(By.xpath(".//*[@id='email']"));
emailEV.sendKeys("@");
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
}
如您所见,我只是尝试使用 AutoCompleteTextView 的 id 设置文本。
我的问题是我的测试无法定位元素,我尝试了这3种方法:
WebElement emailEV=driver.findElement(By.id("com.XXX.XXX:id/email"));
WebElement emailEV=driver.findElement(By.id("com.XXX.XXX.android:id/email"));
WebElement emailEV=driver.findElement(By.xpath(".//*[@id='email']"));
但它们都不起作用。
错误信息是:
org.openqa.selenium.NoSuchElementException:使用给定的搜索参数无法在页面上找到元素。
我是automatization 与Appium 和Android 测试的初学者,我有点迷茫。
请帮忙?
谢谢
编辑:
正如我在回答我的问题时所建议的,我开始使用 UI Automator Viewer。它是一个 .bat 文件,位于 /sdk/tools 文件夹中。
我启动了一个 android 模拟器设备并运行 UI automator Viewer。然后,当单击设备屏幕截图时,我得到了所有元素及其属性。
这样我就可以看到正确的 id:
终于用上了:
AndroidElement emailEV=driver.findElement(By.id("com.mobgen.interview.mobgeninterviewtest:id/email"));
emailEV.setValue("@"); // although i'm stuck here now
感谢您的帮助!
【问题讨论】:
-
能否通过 UiAutomator 添加屏幕截图?
-
按照上面的要求,请添加来自检查器(appium 或 UiAutomator)的视图,以便能够看到您尝试与之交互的这个元素对 appium 是如何可见的,也许您尝试使用的 id 不正确应用到它 ergo 对于 appium 不可见
-
实际上,我今天早上读了第一个答案,我没有使用 UiAutimator,这里是 n00b。我已经开始使用它并且我得到了解决方案。我编辑我的问题。非常感谢。
标签: android appium element ref locate