Appium:清除字段
我现在在应用程序中有我的登录屏幕。每次在屏幕上启动应用程序时,手机号码都会预先填入较旧的文本 我只想知道我试过:Appium:清除字段,appium,Appium,我现在在应用程序中有我的登录屏幕。每次在屏幕上启动应用程序时,手机号码都会预先填入较旧的文本 我只想知道我试过: WebElement mob = driver.findElement(By.name("Mobile Number")); mob.clear // Not working 我试过: String Mobile mob=""; 但它仍然无法删除预先填充的文本 我正在尝试使用appium自动化我的android应用程序,请帮助我。如果文本字段包含任何预先指定的手机号码,请按
WebElement mob = driver.findElement(By.name("Mobile Number"));
mob.clear // Not working
我试过:
String Mobile
mob="";
但它仍然无法删除预先填充的文本
我正在尝试使用appium自动化我的android应用程序,请帮助我。如果文本字段包含任何预先指定的手机号码,请按以下方式执行 WebElement mob=driver.findElement(By.name(“xxxxxxxxx”); mob.clear() XXXXXXXXX:打开应用程序时预先指定的手机号码
或者使用其他一些定位技术,如By.xpath、By.id(如果您将android和Selendroid作为功能进行测试)等。您可能希望避免使用appium内置的clear方法 您可以尝试使用adb shell input keyevent 67,它向android发送一个delete keyevent。 这几乎适用于所有版本 只需单击文本字段两次即可突出显示文本: WebElement mob=driver.findElement(按.tagName(“editText”) 与selenium绑定中的其他方法一样,这将定位第一个textField Available, 您还可以尝试findElements,获取数组中的所有文本字段,并可以选择要操作的任何文本字段
然后,发送一个input keyevent 67来删除整个字段。我也遇到了这个问题。我发现的一个主要问题是,要通过按delete键删除该区域,需要点击行的末尾。这对我很有用:
public void clearTextField(WebElement element) {
double x = element.getLocation().getX() + element.getSize().width - 5;
double y = element.getLocation().getY() + ((double) element.getSize().height / 3);
preciseTap(x, y, 0.1, 1);
while (!element.getText().isEmpty()) {
pressDeleteKey();
}
}
public void preciseTap(double x, double y, double duration, int touchCount) {
JavascriptExecutor js = (JavascriptExecutor) driver;
HashMap<String, Double> tapObject = new HashMap<String, Double>();
tapObject.put("x", x);
tapObject.put("y", y);
tapObject.put("touchCount", (double)touchCount);
tapObject.put("duration", duration);
js.executeScript("mobile: tap", tapObject);
}
public void pressDeleteKey() {
HashMap swipeObject = new HashMap();
swipeObject.put("keycode", 67);
((JavascriptExecutor) driver).executeScript("mobile: keyevent", swipeObject);
}
public void clearTextField(WebElement){
双x=element.getLocation().getX()+element.getSize().width-5;
双y=element.getLocation().getY()+((双)element.getSize().height/3);
精度ap(x,y,0.1,1);
而(!element.getText().isEmpty()){
按DeleteKey();
}
}
公共无效精度AP(双x,双y,双持续时间,整数接触计数){
JavascriptExecutor js=(JavascriptExecutor)驱动程序;
HashMap tapObject=新建HashMap();
tapObject.put(“x”,x);
tapObject.put(“y”,y);
tapObject.put(“touchCount”,(双)touchCount);
tapObject.put(“持续时间”,持续时间);
js.executeScript(“移动:点击”,点击对象);
}
public void pressDeleteKey(){
HashMap swipeObject=新HashMap();
swipeObject.put(“键码”,67);
((JavascriptExecutor)driver).executeScript(“mobile:keyevent”,swipeObject);
}
这比完全清除要慢得多,但我还不知道怎么做。最好是双击或按住,直到所有内容都被选中。这肯定不是有效的,可以改进,可能还有更好的方法。。。 但是,使用adb的shell输入键事件代码,我简单地称之为“dpad right”,将光标一直向右移动。一旦有,发送关键代码“德尔”开始删除所有的方式回来。。。 所以两个用于循环。这主要用于短文:
public void cleatTextFully(WebElement element) {
int stringLength = element.getText().length();
for (int i = 0; i < stringLength; i++) {
mDriver.sendKeyEvent(22); // "KEYCODE_DPAD_RIGHT"
}
for (int i = 0; i < stringLength; i++) {
mDriver.sendKeyEvent(67); // "KEYCODE_DEL"
}
}
public void cleatTextFully(WebElement){
int stringLength=element.getText().length();
对于(int i=0;i
mDriver是AppiumDriver实例。
希望这对你有所帮助。当你的应用程序中打开的屏幕是“网络视图”时,通常会发生这种情况。
当遇到类似问题时,我遵循以下步骤:
WebElement ele = driver.findElement(By.xpath("//Locator of the textfield")); //Locating the textfield int characters_to_delete = ele.getAttribute("value").length();//Counts the number of characters to delete ele.click(); //Tapping or Clicking on the textfield // Deleting or Clearing the textfield off of the prefilled values for(int i=0;i<characters_to_delete;i++){ driver.findElement(By.xpath("//Locator of the Keyboard button 'Delete' ")).click(); } ele.sendKeys("value to be filled in the textfield"); //Filling the textfield with the value WebElement ele=driver.findElement(By.xpath(“//文本字段的定位器”)//查找文本字段 int characters_to_delete=ele.getAttribute(“value”).length()//统计要删除的字符数 ele.click()//点击或单击文本字段 //删除或清除预填充值的文本字段 对于(int i=0;i 这对我很有用。我正在使用find元素by id,然后调用clear
wd.findElement(By.id("username")).clear();
这将清除我案例中用户名字段中预先输入的数据。此方法对我有效,尽管我正在尝试更好的解决方案。同时,请使用此方法
public void clear(String locatorType, String locator, long... waitSeconds)
{
WebElement we = getElementWhenPresent(getByLocator(locatorType, locator), waitSeconds);
String text = we.getText();
int maxChars = text.length();
//we.clear() is not working
for (int i = 0; i < maxChars; i++)
((AppiumDriver)driver).sendKeyEvent(67);
}
public void clear(字符串定位器类型、字符串定位器、长…等待秒)
{
WebElement we=getElementWhenPresent(getByLocator(locatorType,locator),waitSeconds);
String text=we.getText();
int maxChars=text.length();
//we.clear()不起作用
对于(int i=0;i
我也面临同样的问题
尝试单击、清除和发送密钥,成功了
请参阅此代码
如果在android上执行测试,我们可以使用selectAll
- 文本字段上的长按
- 找到并点击selectAll元素(Android全选按钮)
- sendKeyEvent(67)
它将选择整个文本并按delete键。为了避免最近的iOS 8.x错误,我使用以下命令(其中by是by的一个实例,表示您的textfield/textview):
如果您尝试对已清除的文本字段调用clear(),我可能会在appium中出错。在清除之前单击文本框应该可以处理最新的libs:
WebElement mob = driver.findElement(By.name("Mobile Number"));
mob.click();
mob.clear();
或者来自示例jUnitTest
我想这是关于登录屏幕的,所以我建议每次运行脚本时重新启动应用程序,转到appium并在Android设置中检查完全重置。我遇到了类似的问题
driver.findElement(By.name("address").click();
driver.findElement(By.name("address").clear();
driver.findElement(By.name("address").sendKeys("something");`
int stringLength = driver.findElement(by).getText().length();
if (stringLength > 0) {
driver.findElement(by).clear();
}
WebElement mob = driver.findElement(By.name("Mobile Number"));
mob.click();
mob.clear();
WebElement text = driver.findElement(By.xpath("//UIATextField[1]"));
text.sendKeys("12");
text.clear();
self.driver.find_element_by_id(element_id).click()
self.driver.find_element_by_id(element_id).send_keys('')
while (!textField().getText().isEmpty()) {
TouchAction touchAction = new TouchAction(driver);
touchAction.longPress(textField());
driver.getKeyboard().sendKeys(Keys.DELETE);
}
//Get the keyword
String name = driver.findElement(by).getText();
WebElement e1 = driver.findElement(by);
System.out.println("Length of Keyword = " +name.length());
int count = 0;
int keywordlength = name.length();
//click on keyword textbox
e1.click();
while (count < keywordlength) {
//Clear the keyword
TouchAction ta = new TouchAction(driver);
ta.longPress(e1);
driver.getKeyboard().sendKeys(Keys.DELETE);
count++;
}
WebElement element2 = appiumDriver.findElement(By.xpath(element));
element2.sendKeys(Keys.CONTROL + "a");
element2.sendKeys(Keys.DELETE);
List<WebElement> x=driver.findElements(By.className("enter widget details")); //You can get widget details via android UIautomator
driver.findElementById("enter widget details").click(); //You can get widget details via android UIautomator
x.get(index).clear();
x.get(index).clear();
def Clear(self):
self.driver.keyevent(123)#Move Cursor Last one
time.sleep(2)
for i in range(10):
self.driver.keyevent(67)#Deleted Keyboard
self.driver.implicitly_wait(60)
public void sendKeysToElement(WebElement element, String keys) {
element.sendKeys("");
element.clear();
element.sendKeys(keys);
driver.hideKeyboard();
}
And(/^I enter "([^"]*)" on identifier "([^"]*)"$/) do |arg1, arg2|
Input = find_element(id: arg2)
Input.click
Input.clear
Input.send_keys(arg1)
end
public void clearTextBox(WebElement element) throws Exception
{
element.click();
element.sendKeys(Keys.CONTROL + "a");
element.sendKeys(Keys.DELETE);
}
action.longPress(WebElement).perform();
WebElement.clear();
new TouchAction<>((AndroidDriver<?>) driver).tap(new TapOptions().withTapsCount(2).withElement(new ElementOption().withElement(element))).perform();
element.sendKeys("");
for(int x=1;x<6;x++)
{
driver.findElementByXpath("//XCUIElementTypeKey[@name='Delete']").click;
}
MobileElement element = driver.findElement(By.id("id_data"));
Rectangle rectangle = element.getRect();
int YAxis = element.getCenter().getY();
int XAxis = rectangle.getWidth();
TouchAction action = new TouchAction(this.getIOSDriver());
action.tap(TapOptions.tapOptions().withPosition(PointOption.point(XAxis,
YAxis))).perform();
element.clear();