草庐IT

android - Android 上的 Appium - SendKeys to EditText 也输入默认文本

coder 2023-12-20 原文

我正在尝试使用 Appium for Android for Wordpress Mobile ( https://github.com/wordpress-mobile/WordPress-Android ) 编写一些自动化测试。

我要做的第一件事是在主登录屏幕中输入用户名,以便能够登录到我的 Wordpress 站点,但我在“用户名”字段中遇到 SendKeys 问题。

以下是元素在 uiautomatorviewer 中的显示方式:

到目前为止,这是我尝试过的:

List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
WebElement login = textFieldsList.get(0);       
login.sendKeys("username");

和:

driver.findElementsByClassName("android.widget.EditText").get(0).sendKeys("username");

和:

driver.findElement(By.xpath("//android.widget.EditText[@text='Editing. Username or email. ']")).sendKeys("username");

尝试将“用户名”作为用户名发送的所有 3 个版本,当我运行测试时,在该字段中实际输入的是:“编辑。用户名或电子邮件。用户名”

所以,似乎占位符文本也保留了,然后添加了我的用户名。

请注意,当我使用 appium 发送用户名时添加的文本最初并不存在(参见屏幕截图),但在 UI TreeView 中,它似乎是 EditText 中的文本。当 Appium 运行测试时,它实际上是在添加我自己的用户名之前编写“编辑用户名或电子邮件”文本。

我也尝试过,正如这里另一个问题的答案之一所建议的那样:Appium : Clear a field 以下代码,其中 sendKeyEvent(67) 应清除该字段:

List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
WebElement login = textFieldsList.get(0);
login.click();
driver.sendKeyEvent(67);
login.sendKeys("username");

使用 .clear() 会崩溃,我注意到其他人建议尽可能避免使用它。

当然,如果我尝试手动执行此操作,则不会添加占位符文本,我可以通过键入在字段中添加我的用户名。

我也可以使用 driver.sendKeyEvent() 函数并发送一个我的字符,但我想将用户名作为参数发送并能够在字段中键入任何用户名。

因为每次我尝试输入用户名时都会输入额外的文本,为了解决这个问题,我必须先输入“用户名”——在应用程序中,实际输入的文本是“编辑。用户名或电子邮件。用户名” - 然后将光标向左移动到“用户名”一词的前面并开始删除其余部分 - 但这非常慢。这是以这种方式工作的代码:

        String setUsername = "username";
        login.click();
        login.sendKeys(setUsername);

        // hack to delete extra text that gets typed
        int stringLength = login.getText().length() - setUsername.length();
        for (int i = 0; i < setUsername.length(); i++) {
            driver.sendKeyEvent(21); //KEYCODE_DPAD_LEFT
        }
        for (int i = 0; i < stringLength; i++) {
            driver.sendKeyEvent(67); // "KEYCODE_DEL
        }

我错过了什么?任何帮助将不胜感激。我试图理解为什么要输入额外的文本。

最佳答案

经过大量搜索,我发现这确实是 Appium v​​ 1.2.2 中的一个错误:

https://discuss.appium.io/t/android-appium-1-2-2-sendkeys-issue-with-hinted-edit-text/309

希望,正如那里所说,它会在版本 1.2.3 中得到修复。

感谢您的帮助!

关于android - Android 上的 Appium - SendKeys to EditText 也输入默认文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25842365/

有关android - Android 上的 Appium - SendKeys to EditText 也输入默认文本的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  3. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  4. ruby-on-rails - 在默认方法参数中使用 .reverse_merge 或 .merge - 2

    两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option

  5. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  6. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  7. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  8. ruby-on-rails - 如何在 Rails 中设置路由的默认格式? - 2

    路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。

  9. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

  10. ruby - 鸭子输入字符串、符号和数组的优雅方式? - 2

    这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby​​。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac

随机推荐