【问题标题】:Appium testing automatization: locate element with @ref id in Android StudioAppium 测试自动化:在 Android Studio 中使用@ref id 定位元素
【发布时间】: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:使用给定的搜索参数无法在页面上找到元素。

我是automatizationAppium 和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


【解决方案1】:
Step 1: element is the xpath=//android.widget.EditText[contains(@resource-id,"email")]

Step 2:public void click(String element) {
        WebElement webElement = appiumDriver.findElement(By.xpath(element));
        webElement.click();
        System.out.println("Click element: "+element+" index = "+index);

    }

Step 3:
public void elementSendText(String element,  String text) {
        WebElement webElement = appiumDriver.findElement(By.xpath(element));
        webElement.sendKeys(text);

    }

【讨论】:

  • click 工作正常(所以 xpath 很好)但 sendKeys 抛出错误:org.openqa.selenium.WebDriverException:处理命令时发生未知的服务器端错误。
  • 你在文本中传递了什么?
  • 我调用 elementSendText(path, "@");在 appiumExampleTest() 中
  • 我可以不要你使用的 xpath。
  • String path="//android.widget.EditText[contains(@resource-id,\"email\")]";和你发布的一样
猜你喜欢
  • 2018-05-12
  • 2014-08-03
  • 1970-01-01
  • 2016-08-23
  • 2017-09-01
  • 2016-07-29
  • 2017-12-21
  • 2015-09-27
  • 2019-10-05
相关资源
最近更新 更多