Internationalization 使用Appium的AccessibilityId的多语言移动应用程序-错误配方

Internationalization 使用Appium的AccessibilityId的多语言移动应用程序-错误配方,internationalization,appium,accessibility,Internationalization,Appium,Accessibility,我的团队支持以多种语言提供的移动应用程序。我要求团队实现AccessibilityID,这样我就可以运行Appium测试,他们做到了。(为什么我要问这个?因为Appium测试中的每个人都表示这是最好的方法。) 后来,对该应用程序在现实世界中的可访问性(使用辅助技术——又名对讲或屏幕阅读器)进行的测试表明,需要使用上下文信息。例如,如果按钮有文本“提交您的订单”,理想情况下,可访问性ID应该是“提交您的订单”,而不是类似于“表单页面提交”按钮的内容 团队进行了头脑风暴,解决方案是为一种我们不打算支

我的团队支持以多种语言提供的移动应用程序。我要求团队实现AccessibilityID,这样我就可以运行Appium测试,他们做到了。(为什么我要问这个?因为Appium测试中的每个人都表示这是最好的方法。)

后来,对该应用程序在现实世界中的可访问性(使用辅助技术——又名对讲或屏幕阅读器)进行的测试表明,需要使用上下文信息。例如,如果按钮有文本“提交您的订单”,理想情况下,可访问性ID应该是“提交您的订单”,而不是类似于“表单页面提交”按钮的内容

团队进行了头脑风暴,解决方案是为一种我们不打算支持的晦涩语言创建一个lang文件。我们决定使用“pt”,这样所有元素都可以有一个在一段时间内不可能更改的可访问性ID

这现在成了一个问题,因为我希望有英语和法语的视觉自动测试,而不仅仅是葡萄牙语,我希望不必在其中维护带有ORs的XPath。例如,
/*[contains(text(),'Submit')或contains(text(),'soumetre')]
即英语和法语


鉴于我的应用程序更需要用户访问,而不是测试脚本访问,我正在评估下一步的建议。我准备推荐使用ID或名称来缓解这个问题,但我想了解更多关于其他人在这方面的想法。

使用ID和名称可以解决上述问题。 如果您喜欢使用XPath,那么可以使用字典变量来存储基于区域的文本,即[EN='Submit',FR='Soumettre']并通过使用字典值(使用区域作为键并将文本附加到定位器),使用基于区域的文本设置定位器,即,基于区域动态构建定位器可能可行

在我研究Robot框架时,我使用了一些代码来描述它,并使用了Robot框架

*** Variables ***
${region}   EN                       #set this var as per region
${loc}    xpath = //*[contains(text(),'replace_text')
&{submit_loc_text}   EN=Submit
              ...    FR=Soumettre

*** Keywords ***
implementation
     ${text_asper_region}   Get From Dictionary   ${submit_loc_text}    ${region}
     ${loc}   Replace String    ${loc}    replace_text    ${text_asper_region}
     Set Test Variable    ${loc}   ${loc}

我可以知道您是在哪个平台上编写脚本的吗?显然,我问的问题与此相同。我不接受这个答案,因为我不想基于可能更改的内容编写定位器。