Appium 發送發送本機相冊的圖片


問題引入

很多app的都有訪問手機相冊,然后發送圖片的功能。這個功能也是比較常測試的一點。

一般來說,點開手機相冊,就有的相冊的縮略圖。如下圖所示:

這種縮略圖,在appium是找不到任何定位。xpath也沒有。在下面的情況下,該如何選擇該圖片,進行發送呢。解決的方案來自於這篇博客
https://appiumpro.com/editions/32
appium1.7引入了根據圖片策略來定位元素。傳入圖片的base64位編碼,然后引入opencv(開源視圖處理庫來匹配圖片元素。
首先我們要做的是安裝opencv4nodejs庫。opencv4nodejs庫的介紹如下https://www.npmjs.com/package/opencv4nodejs
安裝的步驟按照這個鏈接:https://gist.github.com/adwellj/61e7f202bcfe5b96f312293e9c812ca6
注,這邊說的是兩種方式,只要選擇其中的就好了。
下面列出主要代碼:

獲取圖片的Base64編碼:

 public String getPictureImageB64() throws URISyntaxException,IOException{
        String ImageName="picturetest02.jpg";
        URL refImgUrl=getClass().getClassLoader().getResource(ImageName);
        File refImgFile=Paths.get(refImgUrl.toURI()).toFile();
        return Base64.getEncoder().encodeToString(Files.readAllBytes(refImgFile.toPath()));
    }
將Base64編碼變成對應的appium中MobileBy(MobileBy需要java-clinet7.0 以上的版本,需要更新客戶端庫。

By imageBy=MobileBy.image(getPictureImageB64());
這里只需要將你所要選擇圖片放到項目的resources文件夾即可。上述代碼就可以找到。


appium定位元素位置:

  public void SelectImageElement(AndroidDriver<AndroidElement> driver,By ImageBy){
        WebDriverWait wait=new WebDriverWait(driver,10);
        AndroidElement androidElement=null;
           wait.until(ExpectedConditions.presenceOfElementLocated(ImageBy)).click();
   
        }
    }

在appium的官方文檔上,其實也談到一個方法。http://appium.io/docs/en/advanced-concepts/image-elements/
driver.findElementByImage(String Base64Code)
上面返回的圖片元素只能進行下面的操作

  • click
  • isDisplayed
  • getSize
  • getLocation
  • getLocationInView
  • getElementRect
    上述的操作,而不能進行別的類似sendKeys操作等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM