1

我无法访问标记的 X 元素。

已经与开发人员谈过,他们说不可能在上面放置 id 或可访问性标签,他们说是这种元素类型https://developer.android.com/reference/android/widget/AutoCompleteTextView

我会通过 x 和 y 位置来做,但是如果我使用硬编码的数字,它会在不同分辨率的不同设备上中断。

如何更有效地定位此元素?

我正在使用 appium 进行测试自动化,但这对于任何测试自动化框架来说都是一个问题。

图中使用的工具是 uiautomatorviewer。

在此处输入图像描述

4

3 回答 3

1

您可以在不对值进行硬编码的情况下使用 X 和 Y 位置,它也可以在其他设备上使用,因为“X”按钮没有定位器,它的内置功能带有 edittext,所以 android uiautomator 无法访问这个元素

  1. 获取 EditText 的长度
  2. 获取 X 和 Y
  3. 在触摸动作中传递值(X,Y/2 的 3/4)

这将点击那个位置,这里你需要根据你的位置改变3/4

于 2019-02-16T15:16:27.523 回答
0

您应该尝试使用元素的类。 driver.findElement(By.className("android.widget.EditText"));

如果出现超过 1 个元素,您可以尝试使用 List<WebElement> e=driver.findElements(By.className("GLButton")); e.get(≤Position>).click();

于 2019-02-15T16:48:54.857 回答
-1

您可以使用 Touchaction 类点击 editText 字段中的 Cross 选项。

尝试使用下面的代码

// Identify the x and y co-ordinate for EditText field
    Point elementLoc = driver.findElement(By.xpath("xpath of edittext field")).getLocation();
    int eleX = elementLoc.getX();
    int eleY = elementLoc.getY();

// Identify the width and height of the editText field
    Dimension elementDimen = driver.findElement(By.xpath("xpath of edittext field")).getSize();
    int eleH = elementDimen.getHeight();
    int eleW = elementDimen.getWidth();


// Determine the x and y co-ordinates of cross option    
    int touchX = (int)(eleX + eleW * 0.75D); // 75% from the x co-ordinate of editText field ( x axis position for cross option)
    int touchY = (int)(eleY + eleH * 0.5D);  // 50 % from the y co-ordinate of editText field (y axis position for cross option)

// Tap on the cross option
    TouchAction<?> action = new TouchAction(driver);
    action.tap(PointOption.point(touchX, touchY)).release().perform();

在找到交叉选项的确切位置之前,请尝试使用 touchX 和 touchY 变量的偏移值。

于 2019-02-17T08:04:55.867 回答