我正在创建一个自动化测试项目,我有问题从AutoCompleteTextView中选择项目。
您可以看到它的快照和视图[全部展开]。 AutoCompleteTextView的下拉列表不会出现在视图树中,也无法使用鼠标进行选择。
我尝试过以下方法从AutoCompleteTextView适配器中选择项目表单:
UiScrollable locationList = new UiScrollable(new UiSelector().scrollable(true));
locationList.scrollTextIntoView(location);
UiScrollable locationList = new UiScrollable(locationEditText.getSelector());
locationList.scrollTextIntoView(location);
此处locationEditText是我的AutoCompleteTextView
UiObject selectedLocation = locationList.getChild(new UiSelector().text(location));
selectedLocation.click();
它不会选择传递字符串的项目。
editLocationResId = "android:id/text1";
UiObject selectedLocation = new UiObject(new UiSelector().resourceId(editLocationResId));
selectedLocation.click();
来自adpter textview的ID也不起作用。
有人可以帮我从 uiautomator 中的AutoCompleteTextView中选择项目吗?或者更多的方法获得欲望输出。
答案 0 :(得分:0)
尝试下面的代码,它对我有用。
我使用AutoCompleteText自动完成用户当前所在的位置,locationList只是我在strings.xml文件中写的数组,所以在这里使用你自己的字符串数组。
locationList = res.getStringArray(R.array.ticketLocation);
ArrayAdapter<String> locationAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, locationList);
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.txtCountries);
textView.setThreshold(1);
textView.setAdapter(locationAdapter);
textView.setValidator(new Validator());
textView.setOnFocusChangeListener(new FocusListener());
textView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
TextView ticketLocation = (TextView) view;
getTicketLocation = ticketLocation.getText().toString();
}
});
以下是用于验证位置字段中文本输入的代码,fixText()方法阻止用户键入字符串数组中不存在的文本,例如:如果用户键入“germany” “你的字符串数组列表中不存在,它将替换为”“,这是编辑文本输入字段中的空字符串
class Validator implements AutoCompleteTextView.Validator {
@Override
public boolean isValid(CharSequence text) {
// Log.v("Test", "Checking if valid: " + text);
Arrays.sort(locationList);
if (Arrays.binarySearch(locationList, text.toString()) > 0) {
return true;
}
return false;
}
@Override
public CharSequence fixText(CharSequence invalidText) {
// Log.v("Test", "Returning fixed text");
/*
* I'm just returning an empty string here, so the field will be
* blanked, but you could put any kind of action here, like popping
* up a dialog?
*
* Whatever value you return here must be in the list of valid
* words.
*/
return "";
}
}
class FocusListener implements View.OnFocusChangeListener {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// Log.v("Test", "Focus changed");
if (v.getId() == R.id.txtCountries && !hasFocus) {
// Log.v("Test", "Performing validation");
((AutoCompleteTextView) v).performValidation();
}
}
}
答案 1 :(得分:0)
获取文本字段的坐标:
int x = element.getLocation().getX();
int y = elmement.getLocation().getY();
添加值以获得正确的坐标。
x = x+x1
y = y+y1
使用点击功能点击它。
TouchAction动作=新的TouchAction(驱动程序);
action.tap(X,Y).perform();
答案 2 :(得分:0)
首先打开提货清单,然后尝试使用UiDevice.pressKey(),发送DPAD_DOWN或UP事件,然后按Enter选择所需的项目。
答案 3 :(得分:0)
如果您需要按下拉列表中的第一个元素,我找到了一个有用的解决方法:
public void selectFirstElement() {
TouchAction touchAction = new TouchAction(getAppiumDriver());
int xTapped = autoCompleteTextView.getLocation().getX() + autoCompleteTextView.getSize().getWidth() / 2;
int yTapped = autoCompleteTextView.getLocation().getY() + autoCompleteTextView.getSize().getHeight() ;
touchAction.tap(xTapped, yTapped).perform(); }
如果AutoCompleteTextView声明为autoCompleteTextView,您可以获取屏幕上的当前位置并计算将位于其下方的项目。希望能帮助到你!
答案 4 :(得分:0)
好吧,我找到了转身(这是针对autocompletetextview,对于spinner delete setText()):
UiObject edit = mDevice.findObject(new UiSelector().className(EditText.class).instance(0));
edit.click();
edit.setText(name);
Rect rect = edit.getBounds();
mDevice.waitForWindowUpdate(Package.DIGI_PACKAGE, 1000);
mDevice.click(rect.left + 64, rect.bottom + 72);
获取对象,单击它,插入所需的文本,等待下拉列表出现,然后在其下方点击一些像素
答案 5 :(得分:0)
我创建并一直使用最简单,最有效的方法。只需找到,键入,然后在自动完成文本视图中选择所需的值。
希望它也对您有用。
driver.findElement(By.id(“Element ID”)).clear();
driver.findElement(By.id(“Element ID”)).sendKeys("Type what you want to select");
driver.pressKeyCode(AndroidKeyCode.KEYCODE_PAGE_DOWN);
driver.pressKeyCode(AndroidKeyCode.ENTER);
答案 6 :(得分:0)
您可以使用其文本找到要选择的元素。确保在显示建议列表之后执行此代码行。
//Get a reference to the autocomplete element
UiObject2 autocomplete = device.findObject(By.res("yourpackage","autocomplete_id"));
//Put a text that will trigger the suggestion list
autocomplete.setText("68623 Lampertheim");
//Gain the focus
autocomplete.click();
//Finally, find the element that we want in the suggestion list and click it
device.findObject(By.text("68623 Lampertheim")).click();
希望有帮助。