appium(六)H5頁面


1、區分APP是H5還是native

  (1)手機進入開發者模式,選擇顯示頁面布局邊界,native app中所有的控件都是獨立的紅框,而web H5是一個完整的大框,里面的可以操作的小控件不獨立

  (2)adb先連接模擬器,在電腦瀏覽器打開chrome://inspect使用inspect工具,如果能夠在其中看到webview的顯示,那么說明這個地方有個webview,是H5頁面 。(如果需要inspect,需要*翻*牆*下載一下devtools,否則會出現404)  如下面的兩個webview就是H5頁面

 

2、H5頁面元素定位

  如果H5頁面是在瀏覽器中,則Desired Capabilities的設置和啟動APP不同

    如果使用Android原生的瀏覽器打開H5,則使用browserName="Browser" 代替appPackage和appActivity;在appium啟動browser時,如果出現chromedriver不匹配的問題,先

查看手機安卓的系統應用中 android system webview的版本(需要設置顯示系統進程),然后根據手機的android system webview版本下載對應的Chromedriver,下載地址:

https://npm.taobao.org/mirrors/chromedriver/2.23/  ,下載之后有兩種方法配置:

    方法1:放到appium路徑下。C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win (appium-desktop對應的路徑),如果安裝了

appium-server,對應的在appium-server路徑下找到chromedriver進行替換,最好appium-desktop和appium-server都更換一下

    方法2(推薦):通過capability設置chromedriverExecutable參數,指定可用的driver路徑

最終的打開瀏覽器及H5頁面的代碼如下

public class AndroidBrowserTest {
    public static void main(String[] args) throws MalformedURLException, InterruptedException {
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();

        desiredCapabilities.setCapability("deviceName", "127.0.0.1:7555");
        desiredCapabilities.setCapability("platformName", "Android");
        desiredCapabilities.setCapability("platformVersion", "6.0.1");
        //啟動模擬器自帶的瀏覽器,設置browserName 和可用Chromedriver的路徑 chromedriverExecutable
        desiredCapabilities.setCapability("browserName", "Browser");
        desiredCapabilities.setCapability("chromedriverExecutable", "C:\\Users\\HJY\\Downloads\\chromedriver_win32\\chromedriver.exe");
        //可選參數
        //不要重置簽名
        desiredCapabilities.setCapability("noSign", true);
        //不清除緩存
        desiredCapabilities.setCapability("noReset", true);

        //設置使用unicode鍵盤,讓自動化腳本實現過程中能夠輸入中文,成對使用,單獨使用下面的某一個屬性會ignore
        desiredCapabilities.setCapability("unicodeKeyboard", true);
        desiredCapabilities.setCapability("resetKeyboard", true);

        AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities);
        Thread.sleep(5000);
        //打開H5頁面
        driver.get("https://ui.ptlogin2.qq.com/cgi-bin/login?pt_hide_ad=1&style=9&appid=549000929&pt_no_auth=1&pt_wxtest=1&daid=5&s_url=https%3A%2F%2Fh5.qzone.qq.com%2Fmqzone%2Findex");
  }

    --2.如果是其他第三方瀏覽器,它就是一個安裝的第三方應用,通過appPackage和appActivity當成普通的app來進行啟動

    --3.如果使用Chrome,則參數為 browserName="Chrome" 或者  "Chromium"

元素定位:

  使用selenium來定位:如果沒有H5頁面的ur,可以在Chrome中打開H5頁面對應的非H5的url,F12打開開發者工具,使用開發者工具的移動端模擬功能切換成移動端模擬狀態(Toggle device toolbar)之后,

刷新一下頁面會自動得到H5頁面的url,同時可以使用Chrome來進行元素定位;

如果頁面既有native又有H5,那么就需要切換context (driver.getContextHandles()獲取contextHandles ),有兩個contextHandles,分別是:NATIVE_APP和CHROMIUM ,使用driver.context("NATIVE_APP")切

換到native,此時使用appiumr的原生安卓元素定位;使用driver.context("CHROMIUM")切換到H5,此時使用selenium的HTML定位

        //打開H5頁面
        driver.get("https://ui.ptlogin2.qq.com/cgi-bin/login?pt_hide_ad=1&style=9&appid=549000929&pt_no_auth=1&pt_wxtest=1&daid=5&s_url=https%3A%2F%2Fh5.qzone.qq.com%2Fmqzone%2Findex");

        System.out.println(driver.getWindowHandle());
        //獲取所有handles
        Set<String> handles=driver.getContextHandles();
        for(String s:handles){
            System.out.println(s);
        }
        //使用selenium定位
        driver.findElement(By.id("u")).sendKeys("123456");

        //切換為NATIVE_APP,使用appium定位
        driver.context("NATIVE_APP");
        Thread.sleep(3000);
        driver.findElement(By.xpath("//android.webkit.WebView[@content-desc=\"手機統一登錄\"]/android.widget.ListView/android.view.View[2]/android.widget.EditText")).sendKeys("222222");

        //切回CHROMIUN,使用selenium定位
        driver.context("CHROMIUM");
        Thread.sleep(3000);
        driver.findElement(By.id("go")).click();

 

H5頁面元素定位的總結:H5使用selenium,native使用appium,注意切換context

其他博客的參考:https://blog.csdn.net/ningmengban/article/details/94741949


免責聲明!

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



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