Java 如果应用程序是多语言的,那么查找元素的最佳方法是什么?

Java 如果应用程序是多语言的,那么查找元素的最佳方法是什么?,java,android,xpath,selenium-webdriver,appium,Java,Android,Xpath,Selenium Webdriver,Appium,我正在尝试自动化一个用阿拉伯语和英语实现的android应用程序的测试用例 我正在使用appium和AndroidDriver。我还在主要测试中使用Xpath。 当我切换到阿拉伯语时,测试用例不再工作了。 有什么建议吗?我使用的最好的测试工具是RationalRobot。它将捕获组件id而不是图像。和100%正确捕捉 对于您的情况,我认为您需要将功能测试和i18n测试分开。该函数仅用英语测试,并有专门的翻译案例。尝试使用monitor.bat找出元素的id或class,它应该在您的Android

我正在尝试自动化一个用阿拉伯语和英语实现的android应用程序的测试用例

我正在使用
appium
AndroidDriver
。我还在主要测试中使用
Xpath
。 当我切换到阿拉伯语时,测试用例不再工作了。
有什么建议吗?

我使用的最好的测试工具是RationalRobot。它将捕获组件id而不是图像。和100%正确捕捉


对于您的情况,我认为您需要将功能测试和i18n测试分开。该函数仅用英语测试,并有专门的翻译案例。

尝试使用
monitor.bat
找出元素的
id或class
,它应该在您的Android sdk中。如果看不到你的应用程序代码,就很难说出为什么它没有点击密码字段。但是,如果您提供了正确的Id,则无论应用程序使用何种语言,它都应始终工作。

@karchigh:这是我正在使用的代码,它工作正常。但若我在开始写密码之前并没有清除密码字段,那个么即使在发送密钥之后,它也将始终为空

public void Credentials(String username,String password)
{ 
    driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.ScrollView[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.EditText[1]")).sendKeys(username);
    driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.ScrollView[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.EditText[2]")).clear();
    driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.ScrollView[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.EditText[2]")).sendKeys(password);
    driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.ScrollView[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.TextView[1]")).click();

}

如果ID和classname是唯一的,则应该依赖它们。Xpath可能会在多语言中产生问题。当我用用户名写它时,id是相同的,这是可以的。但在密码字段中,我不知道问题出在哪里,它单击眼睛图标而不是发送密码。send keys(),即使两种语言中的id相同!你的密码问题解决了吗?如果没有发送,请附上用户名和密码的代码。我用一种非常奇怪的方式来解决它,事实上,我在密码字段中所做的是去那里并清除文本(或者发送密码为空的密钥,甚至不是空的,因为第一次没有写任何东西(阿拉伯语版本))然后转到用户名和发送密钥,然后返回密码并再次发送密钥。注意:当我想输入username,然后输入password==>username时的实际行为没问题,但密码仍然是空的……我不明白u;)如果你能为此发起一个聊天,它将如何捕获英语和阿拉伯语中相同的组件,这将是很有帮助的?在阿拉伯语版本中,所有屏幕、字段和数据都会向另一个方向还原?iosI中的appium inspector建议在执行任何sendkeys操作之前将xpath定义为WebElements,因为它们非常容易遍历。您是对的,但driver.findelelement(By.xpath(“//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.ScrollView[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.EditText[2]).clear();当清除已空的fild时,点击眼睛图标!!如果没有页面截图和uiautomator层次结构,很难进行评论