如何测试的Android吐司消息转换成时代(硒的Java)

问题描述 投票:4回答:6

我正在使用Selenium和Java在Android上运行脚本(通过Appium服务器)。我看到用selenium来定位吐司是不可能的

driver.findElement(By.LinkText("User not logged in")

在早期时代

但可以在Selendroid中用于捕获Toast消息。

我有一种方法可以在同一个脚本中同时使用Selendroid和Appium吗?

selenium-webdriver appium android-testing selendroid
6个回答
1
投票

方法1:从Appium版本1.6.4支持toast消息,因为你需要使用automationName:'uiautomator2'

toast = driver.find_element(:xpath, "//android.widget.Toast[1]")
if toast.text == "Hello" 

但我不推荐这个,因为uiautomator2还不稳定。

方法2:

  1. 触发屏幕上的短信
  2. 捕获屏幕截图
  3. 将图像转换为文本文件 def assettoast(string) sname = (0...8).map { (65 + rand(26)).chr }.join $driver.driver.save_screenshot("#{sname}") # Make sure tesseract is installed in the system. If not you can install using "brew install tesseract" in mac system ("tesseract #{sname} #{sname}") text_file="#{sname}.txt" var= get_string_from_file(string, text_file) raise if var != true end
  4. 检查文本文件中是否有toast消息 def get_string_from_file(word, filename) File.readlines(filename).each do |line| return true if line.include?(word) end end

0
投票

看起来你不能在同一个会话中切换驱动程序类型。如果您尝试仅切换到Selendroid进行吐司验证 - 您可以使用OSR图像识别引擎。

检查此答案w/ Ruby bindings

想法很简单:

  • 使吐司信息出现
  • 拍几张截图
  • 迭代截取屏幕截图并查找所需文本

以下是Java中OCR使用的简单示例:tess4j example(确保安装了Tesseract引擎)


0
投票
Step 1:
File scrFile=null;
String path1 = null;
BufferedImage originalImage=null;
BufferedImage resizedImage=null;
System.out.println("Starting\n\n\n\n");
scrFile = ((TakesScreenshot) appiumDriver).getScreenshotAs(OutputType.FILE);
System.out.println("after scrfile\n\n\n\n");
originalImage = ImageIO.read(scrFile);
System.out.println("after originalFile\n\n\n");
BufferedImage.TYPE_INT_ARGB : originalImage.getType();
resizedImage = CommonUtilities.resizeImage(originalImage, IMG_HEIGHT, IMG_WIDTH);
ImageIO.write(resizedImage, "jpg", new File(path + "/"+ testCaseId + "/img/" + index + ".jpg"));
Image jpeg = Image.getInstance(path + "/" + testCaseId + "/img/"+ index + ".jpg");
Step 2: 
BufferedImage pathforToast= original image;
Step 3:
System.setProperty("jna.library.path","C:/Users/Dell/workspace/MOBILEFRAMEWORK/dlls/x64/");
Tesseract instance = Tesseract.getInstance();
`enter code here`ImageIO.scanForPlugins();
String result=null;
result = instance.doOCR(pathforToast);`enter code here`
System.out.println(result);`enter code here`

0
投票

Appium 1.6.4@beta最新版本支持Toast消息


0
投票

拍摄Toast Message页面的屏幕截图并尝试将图像文件转换为Text并使用以下代码验证文本。

  public void imageconversion(String filePath) throws IOException,          
    {    
                ITesseract instance = new Tesseract();
    //file path is the image which you need to convert to text
                File imageFile = new File(filePath);  
                BufferedImage img = null;
                img = ImageIO.read(imageFile);
                BufferedImage blackNWhite = new BufferedImage(img.getWidth(),img.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
                Graphics2D graphics = blackNWhite.createGraphics();
                graphics.drawImage(img, 0, 0, null);
                //path where your downloaded tessdata exists
                instance.setDatapath("E://ocr//data"); 
              //What language you required to convert,( e.g. English)
                instance.setLanguage("eng");        
                String result = instance.doOCR(blackNWhite);


                System.out.println(result);

            }

0
投票

Appium Directly不提供任何API来读取我们需要使用tess4j jar执行此操作的toast消息。首先我们需要拍摄屏幕截图,然后我们需要使用tess4j API从屏幕截图中读取文本。

 static String scrShotDir = "screenshots";
  File scrFile;
  static File scrShotDirPath = new java.io.File("./"+ scrShotDir+ "//");
  String destFile;
  static AndroidDriver driver = null;

 public String readToastMessage() throws TesseractException {
String imgName = takeScreenShot();
  String result = null;
  File imageFile = new File(scrShotDirPath, imgName);
  System.out.println("Image name is :" + imageFile.toString());
  ITesseract instance = new Tesseract();

  File tessDataFolder = LoadLibs.extractTessResources("tessdata"); // Extracts
                   // Tessdata
                   // folder
                   // from
                   // referenced
                   // tess4j
                   // jar
                   // for
                   // language
                   // support
  instance.setDatapath(tessDataFolder.getAbsolutePath()); // sets tessData
                // path

  result = instance.doOCR(imageFile);
  System.out.println(result);
  return result;
 }

 /**
  * Takes screenshot of active screen
  * 
  * @return ImageFileName
  */
 public String takeScreenShot() {
  File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); 

  SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy__hh_mm_ssaa");
  new File(scrShotDir).mkdirs(); // Create folder under project with name
          // "screenshots" if doesn't exist
  destFile = dateFormat.format(new Date()) + ".png"; // Set file name
               // using current
               // date time.
  try {
   FileUtils.copyFile(scrFile, new File(scrShotDir + "/" + destFile)); // Copy
                    // paste
                    // file
                    // at
                    // destination
                    // folder
                    // location
  } catch (IOException e) {
   System.out.println("Image not transfered to screenshot folder");
   e.printStackTrace();
  }
  return destFile;
 }

有关详细信息,请参阅此视频 - https://www.youtube.com/watch?v=lM6-ZFXiSls

© www.soinside.com 2019 - 2024. All rights reserved.