我现在在应用程序中有我的登录屏幕。每次在屏幕上启动应用程序时,手机号码都会预先填入旧文本。
我只是想知道我已经尝试过:
WebElement mob = driver.findElement(By.name("Mobile Number"));
mob.clear // Not working
我试过了:
String Mobile
mob="";
但仍无法删除预填充的文字。
我正在尝试使用appium自动化我的Android应用程序,请帮助我。
答案 0 :(得分:6)
绝对没有效率,可以改进,可能是更好的方式...... 但是,使用adb的shell输入键事件代码我简单地称为" dpad right"将光标一直向右移动。在那里,发送密钥代码" DEL"开始一直删除... 所以...两个for循环。这主要用于短文:
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"
}
}
mDriver是AppiumDriver实例。 希望这能有所帮助。
答案 1 :(得分:5)
我也遇到了麻烦。我发现的一个主要问题是,为了通过按删除键删除该区域,它需要点击该行的末尾。这对我有用:
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);
}
这比仅仅清除它要快得多,但我还没弄清楚如何做到这一点。非常适合双击或点击并按住直到选中所有内容。
答案 2 :(得分:5)
在清除之前单击textBox应该使用最新的库:
WebElement mob = driver.findElement(By.name("Mobile Number"));
mob.click();
mob.clear();
来自样本jUnitTest here
的ORWebElement text = driver.findElement(By.xpath("//UIATextField[1]"));
text.sendKeys("12");
text.clear();
我想
答案 3 :(得分:3)
我能够使用下面的代码解决这个问题&#34; textField()。clear()&#34;似乎没有像Genymotion那样在某些设备和模拟器上工作。
while (!textField().getText().isEmpty()) {
TouchAction touchAction = new TouchAction(driver);
touchAction.longPress(textField());
driver.getKeyboard().sendKeys(Keys.DELETE);
}
代码将循环直到textfield被清除。希望这会有所帮助,适用于Android和iOS。
答案 4 :(得分:3)
如果在android上执行测试,我们可以使用selectAll。
它将选择整个文本并按删除。
答案 5 :(得分:2)
您可能希望避免使用appium内置的明确方法。
你可以尝试使用adb shell输入keyevent 67,它会向android发送一个删除键事件。 这几乎适用于所有版本。
您只需单击文本字段两次即可突出显示文本:
WebElement mob = driver.findElement(By.tagName(&#34; editText&#34;));
可以找到第一个textField可用,就像selenium绑定中的其他方法一样, 您也可以尝试使用findElements,并获取数组中的所有文本字段,您可以选择您想要操作的任何文本字段。
然后,发送输入keyevent 67以删除整个字段。
答案 6 :(得分:1)
为了避免最近的iOS 8.x错误,我使用以下内容(其中by是By表示textfield / textview的实例):
int stringLength = driver.findElement(by).getText().length();
if (stringLength > 0) {
driver.findElement(by).clear();
}
如果您尝试针对已经清晰的文本字段调用clear(),我倾向于在appium中出错。
答案 7 :(得分:1)
我遇到了同样的问题,但我找到了一个合适的解决方案。
public void clearTextBox(WebElement element) throws Exception
{
element.click();
element.sendKeys(Keys.CONTROL + "a");
element.sendKeys(Keys.DELETE);
}
它肯定会起作用。
答案 8 :(得分:1)
我最近遇到了类似的问题。我做了什么,如果是equals ""
,则从编辑文本中获取文本,然后发送名为clear()
方法的其他密钥。
答案 9 :(得分:1)
这种方法对我有用,虽然我正在努力寻找更好的解决方案。在此期间,请使用此方法。
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);
}
答案 10 :(得分:1)
如果文本字段包含任何预先指定的手机号码,请按以下方式进行操作。
WebElement mob = driver.findElement(By.name(“xxxxxxxxxx”)); mob.clear();
xxxxxxxxxx:打开应用程序时预先指定的手机号码。
否则使用其他一些定位技术,如By.xpath,By.id(如果您正在测试android和Selendroid作为功能)等。
答案 11 :(得分:0)
经过验证的IOS模拟器或设备清除文本的方案
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();
在带有 appium 1.21.0 的模拟器 iOS 14.3 上验证
答案 12 :(得分:0)
我正在使用一个双标签,并向该字段发送一个空密钥。在我的UI测试中,此功能稳定。
new TouchAction<>((AndroidDriver<?>) driver).tap(new TapOptions().withTapsCount(2).withElement(new ElementOption().withElement(element))).perform();
element.sendKeys("");
答案 13 :(得分:0)
为我工作:
action.longPress(WebElement).perform();
WebElement.clear();
答案 14 :(得分:0)
我很难解决这个问题,因为ios APP无法自动清除特定字段
也无法使用任何其他替代方法,因此在我看来是可行的!
1。获取键盘的“删除”按钮的XPath,然后将其循环并使用click方法清除它,这在我的情况下是有效的
for(int x=1;x<6;x++)
{
driver.findElementByXpath("//XCUIElementTypeKey[@name='Delete']").click;
}
答案 15 :(得分:0)
我使用cucumber
和ruby
来编写我的测试,这对我来说适用于iOS和Android。
arg1
和arg2
是我在gherkin
步骤中提供的输入值。
And(/^I enter "([^"]*)" on identifier "([^"]*)"$/) do |arg1, arg2|
Input = find_element(id: arg2)
Input.click
Input.clear
Input.send_keys(arg1)
end
答案 16 :(得分:0)
对我有帮助的是在清除之前添加一个空的sendKeys。
像这样:
public void sendKeysToElement(WebElement element, String keys) {
element.sendKeys("");
element.clear();
element.sendKeys(keys);
driver.hideKeyboard();
}
此方法用于我们的所有输入字段。没有空的sendKeys,它没有正确清除所有字段。
答案 17 :(得分:0)
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)
答案 18 :(得分:0)
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();
请注意这对我有用,但您可能需要按照您的要求操作您的代码,谢谢。
答案 19 :(得分:0)
WebElement element2 = appiumDriver.findElement(By.xpath(element));
element2.sendKeys(Keys.CONTROL + "a");
element2.sendKeys(Keys.DELETE);
答案 20 :(得分:0)
使用最新版本的appium可以克服这个问题。在旧版本中,如果文本较长,有时不会清除所有文本字段。
答案 21 :(得分:0)
对于iOS,我可以使用以下代码段执行退格/删除:
//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++;
}
答案 22 :(得分:0)
我正在使用python,这就是我使用的:
self.driver.find_element_by_id(element_id).click()
self.driver.find_element_by_id(element_id).send_keys('')
我希望它有所帮助。
答案 23 :(得分:0)
这是关于登录屏幕所以我建议每次运行脚本时重新启动应用程序,转到appium并检查Android设置中的完全重置。
答案 24 :(得分:0)
我遇到了同样的问题。
尝试点击,清除并发送密钥,它有效。
查看此代码
driver.findElement(By.name("address").click();
driver.findElement(By.name("address").clear();
driver.findElement(By.name("address").sendKeys("something");`
答案 25 :(得分:0)
driver.findElement(By.name("Mobile Number")).clear();
这对我有用。我通过id使用find元素然后调用clear。
wd.findElement(By.id("username")).clear();
在我的情况下,这将清除字段用户名中预先输入的数据。
答案 26 :(得分:0)
这通常发生在您的应用中打开的屏幕是&#34; WebView&#34;。
遇到类似问题时,我按照以下步骤操作:
下面是可能帮助您解决问题的代码:
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