我正在为应用程序(iOS和Android appium版本1.7.0)进行翻译自动化。意思是我应该浏览应用程序的所有页面然后我使用gcloud api来识别语言。
我需要帮助找到有效方式来收集特定屏幕上显示的所有文字。
目前我正在使用此approch,如下面的代码所示:
我得到了具有文字属性的
public void displayText()
{
System.out.println("i will display all the text and each of their languages");
// I find all the elements on the page as such
List<MobileElement> list = driver.findElements(By.xpath("//*"));
assertTrue(list.size()>0) ;
System.out.println(list.size());
//foreach of the elements detected I determine the language
for(int i=0;i<list.size();i++)
{ if (list.get(i).getText()!= null) {
String SeenText = list.get(i).getText();
System.out.println(SeenText);
//Lang detection
List<Detection> detections
=translate.detect(ImmutableList.of(list.get(0).getText()));
System.out.println("Language(s) detected:");
for (Detection detection : detections) {
System.out.printf("\t%s\n", detection);}
}}
System.out.println(driver1.getPageSource());
但是,这仅适用于元素较少的页面。内容繁重的分页需要花费大量时间才能使appium会话超时。
我考虑过手动解析&#34; driver.getPageSource())&#34;的结果。但我不确定这是否可靠。
有关更好,更实用的方法来获取屏幕中所有文字的想法吗?
Thans!
答案 0 :(得分:1)
使用findElements()
收集整个用户界面,因为你注意到MobileElements可能是一个非常繁重的过程,特别是在使用XPath时。
我建议您探索通常(或仅希望)包含应用程序中任何文本内容的元素类类型,并通过driver.findElements(By.className(""));
在Android上,所有文本内容都很有可能使用TextViews:
driver.findElements(By.className("android.widget.TextView"));
在iOS上,文本内容通常在XCUIElementTypeStaticText中找到
driver.findElements(By.className("XCUIElementTypeStaticText"));
driver.getPageSource()
将是保持验证逻辑高效的最后手段。在这种情况下,您会向Appium服务器发送一个请求,并立即收到您要查找的所有信息。解析XML在本地执行并不重要,但需要花费一些精力来实现。要使driver.getPageSource()调用内容可靠,您应该首先声明该页面已完全加载。