国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python +Appium 實(shí)現(xiàn)app自動(dòng)化測(cè)試

這篇具有很好參考價(jià)值的文章主要介紹了Python +Appium 實(shí)現(xiàn)app自動(dòng)化測(cè)試。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Python +Appium 實(shí)現(xiàn)app自動(dòng)化測(cè)試


一、Appium簡(jiǎn)介

Appium是一款開源工具,用于自動(dòng)化iOS、Android和Windows桌面平臺(tái)上的本地、移動(dòng)web和混合應(yīng)用程序。原生應(yīng)用是指那些使用iOS、Android或Windows sdk編寫的應(yīng)用。移動(dòng)網(wǎng)頁應(yīng)用是通過移動(dòng)瀏覽器訪問的網(wǎng)頁應(yīng)用(appum支持iOS和Chrome上的Safari或Android上的內(nèi)置“瀏覽器”應(yīng)用)?;旌蠎?yīng)用程序有一個(gè)“webview”的包裝,這是一個(gè)允許與web內(nèi)容交互的原生控件。像Apache Cordova這樣的項(xiàng)目可以很容易地使用web技術(shù)構(gòu)建應(yīng)用程序,然后將這些技術(shù)捆綁到原生包裝中,創(chuàng)建一個(gè)混合應(yīng)用程序。

重要的是,Appium是“跨平臺(tái)”的:它允許您使用相同的API在多個(gè)平臺(tái)(iOS、Android、Windows)上編寫測(cè)試。這使得代碼可以在iOS、Android和Windows測(cè)試套件之間重用。

二、環(huán)境所需資源

  1. JDK
  2. Android SDK
  3. Python
  4. Pycharm
  5. Appium-Server-GUI
  6. Appium-Inspector

三、環(huán)境搭建教程

  1. JDK安裝
  2. Android SDK配置
  3. Python安裝
  4. PyCharm安裝
  5. Appium安裝

Appium-Server-GUI 配置Android SDK 和 Java JDK 路徑
Python +Appium 實(shí)現(xiàn)app自動(dòng)化測(cè)試

Appium-Inspector環(huán)境配置
Python +Appium 實(shí)現(xiàn)app自動(dòng)化測(cè)試

Appium-Inspector運(yùn)行Start Session 界面介紹

Python +Appium 實(shí)現(xiàn)app自動(dòng)化測(cè)試
Python +Appium 實(shí)現(xiàn)app自動(dòng)化測(cè)試

四、注意事項(xiàng)

一、Apium-Server-Gui
	環(huán)境變量配置:
	1. Android SDK安裝目錄;
	2. Java JDK安裝目錄;

二、Appium-Inspector
	1. 遠(yuǎn)程路徑(Remote Path):/wd/hub 
	2. 高級(jí)設(shè)置(Advanced Settings):勾選  Allow Unauthorized Certificates,不勾選 Use Proxy

三、手機(jī)設(shè)置進(jìn)入開發(fā)者選項(xiàng)(開發(fā)者模式)
	1. 開發(fā)USB調(diào)試
	2. 打開USB調(diào)試(安全設(shè)置)

四、手機(jī)安裝AppiumSettings
	1. 如果手機(jī)是第一次連接appium,會(huì)提示下載一個(gè)軟件【Appium Settings】,正常下載安裝即可

五、adb 命令

1. adb devices -l	查看已鏈接的設(shè)備
2. adb shell getprop ro.build.version.release	查看Android內(nèi)核版本號(hào)
3. adb shell dumpsys activity | findstr “mResume” 查看手機(jī)屏幕當(dāng)前應(yīng)用頁面Activity名稱已經(jīng)包名 (window)
4. adb shell dumpsys window | grep mCurrent	查看手機(jī)屏幕當(dāng)前應(yīng)用頁面Activity名稱已經(jīng)包名(mac)

六、python代碼


# 新建一個(gè)py文件,例如:mi_8se_testapp.py,將下面代碼復(fù)制粘貼到py文件
import time

from appium import webdriver
# appium 報(bào)錯(cuò) 需要安裝 Appium-Python-Client;webdriver 報(bào)錯(cuò)需要安裝 Appium Python Client: WebDriver module
#安裝方式 在報(bào)錯(cuò)的提示地方點(diǎn)擊 install

from appium.webdriver.common.appiumby import AppiumBy

# For W3C actions
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.pointer_input import PointerInput

caps = {}
caps["platformName"] = "Android"
caps["appium:platformVersion"] = "10"
caps["appium:deviceName"] = "MI_8_SE"
caps["appium:appPackage"] = "com.app.appnewframe"
caps["appium:appActivity"] = ".activity.LoginActivity"
caps["appium:noReset"] = True
caps["appium:ensureWebviewsHavePages"] = True
caps["appium:nativeWebScreenshot"] = True
caps["appium:newCommandTimeout"] = 3600
caps["appium:connectHardwareKeyboard"] = True
# driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)

# 或者用下面的配置參數(shù)
desired_caps = {
    'platformName': 'Android',
    'platformVersion': '10',
    'deviceName': 'MI_8_SE',
    'appPackage': 'com.test.app',
    'appActivity': '.activity.MainActivity',
    'noReset': True
}

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
#點(diǎn)擊Remote 查看源碼,其中 command_executor: str = 'http://127.0.0.1:4444/wd/hub'

driver.find_element(by=AppiumBy.ID, value="et_account").set_text("test@admin.com")
driver.find_element(by=AppiumBy.ID, value="et_pwd").set_text("test 123456")
driver.find_element(by=AppiumBy.ID, value="btn_login").click()


# find_element(by=AppiumBy.ID, value="et_account") , 點(diǎn)擊 find_element方法查看源碼,by=AppiumBy.ID,value是元素的 id名稱
# 搜索完后調(diào)用driver.quit()會(huì)直接退出app
# input('**********')
# 10秒鐘之后退出程序
time.sleep(10)
#搜索完后不會(huì)退出app
# driver.quit()

7、TestApp代碼

build.gradle代碼

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    compileSdk 31

    defaultConfig {
        applicationId "com.test.app"
        minSdk 23
        targetSdk 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    // 簽名文件別名testapp, 123456,123456

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
    kotlinOptions {
        jvmTarget = '11'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

}

activity_main.xml布局代碼

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.MainActivity">

    <androidx.appcompat.widget.AppCompatTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="30dp"
        android:text="Hello World!"
        android:textColor="@color/black"
        android:textSize="20sp" />

    <androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/et_account"
        android:layout_width="match_parent"
        android:layout_height="46dp"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="100dp"
        android:layout_marginRight="24dp"
        android:hint="請(qǐng)輸入手機(jī)號(hào)或者郵箱"
        android:textColor="@color/black"
        android:textSize="14sp" />

    <androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/et_pwd"
        android:layout_width="match_parent"
        android:layout_height="46dp"
        android:layout_margin="24dp"
        android:hint="請(qǐng)輸入6 ~ 20 位密碼"
        android:maxLength="20"
        android:inputType="textPassword"
        android:textColor="@color/black"
        android:textSize="14sp" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="24dp"
        android:background="@color/black"
        android:gravity="center"
        android:text="登錄"
        android:textColor="@color/white"
        android:textSize="20sp" />


</androidx.appcompat.widget.LinearLayoutCompat>

MainActivity.kt代碼

package com.test.app.activity

import android.os.Bundle
import android.text.TextUtils
import android.view.Gravity
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatButton
import androidx.appcompat.widget.AppCompatEditText
import com.test.app.R
import kotlinx.coroutines.*

class MainActivity : AppCompatActivity() {
    private lateinit var et_account: AppCompatEditText
    private lateinit var et_pwd: AppCompatEditText
    private lateinit var btn_login: AppCompatButton
    private val mainScope = MainScope()
    private var mToast: Toast? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initView()
        initEvent()

    }

    private fun initView() {
        et_account = findViewById(R.id.et_account)
        et_pwd = findViewById(R.id.et_pwd)
        btn_login = findViewById(R.id.btn_login)
    }

    private fun initEvent() {
        btn_login.setOnClickListener {
            login()
        }
    }

    private fun login() {

        val account = et_account.text.toString()
        if (account.isNullOrBlank()) {
            show("請(qǐng)輸入手機(jī)號(hào)或者郵箱")
            return
        }
        val pwd = et_pwd.text.toString()

        if (pwd.isNullOrBlank()) {
            show("請(qǐng)輸入密碼")
            return
        }

        if (pwd.length < 5) {
            show("輸入密碼長(zhǎng)度不能小于5位")
            return
        }

        mainScope.launch {
            show("登錄中...")
            withContext(Dispatchers.IO) {
                //模擬網(wǎng)絡(luò)請(qǐng)求耗時(shí)操作
                delay(2000)
            }

            if ("test@admin.com".equals(account) && "123456".equals(pwd)) {
                show("登錄成功")
            } else {
                show("登錄失敗")
            }
        }

    }

    fun show(text: CharSequence?) {
        if (TextUtils.isEmpty(text)) return
        mToast?.let {
            it.cancel()
            mToast = null
        }
        mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT)
        mToast?.apply {
            setText(text)
            setGravity(Gravity.CENTER, 0, 0)
            show()
        }

    }

    override fun onDestroy() {
        mainScope.cancel()
        super.onDestroy()
    }

}

8、自動(dòng)化測(cè)試效果圖

Python +Appium 實(shí)現(xiàn)app自動(dòng)化測(cè)試文章來源地址http://www.zghlxwxcb.cn/news/detail-407981.html

參考文章

  • Python+Appium從安裝到第一個(gè)小練習(xí)(保姆級(jí)別教程)
  • appium——appium環(huán)境搭建及使用appium進(jìn)行APP測(cè)試
  • python+Appium 實(shí)現(xiàn)app自動(dòng)化測(cè)試詳細(xì)講解

到了這里,關(guān)于Python +Appium 實(shí)現(xiàn)app自動(dòng)化測(cè)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用【Python+Appium】實(shí)現(xiàn)自動(dòng)化測(cè)試

    使用【Python+Appium】實(shí)現(xiàn)自動(dòng)化測(cè)試

    一、環(huán)境準(zhǔn)備 1.腳本語言:Python3.x ? ?IDE:安裝Pycharm 2.安裝Java JDK 、Android SDK 3.adb環(huán)境,path添加E:SoftwareAndroid_SDKplatform-tools 4.安裝Appium for windows,官網(wǎng)地址 Redirecting ?點(diǎn)擊下載按鈕會(huì)到GitHub的下載頁面,選擇對(duì)應(yīng)平臺(tái)下載 ??安裝完成后,啟動(dòng)Appium,host和port默認(rèn)的即可,然

    2024年02月08日
    瀏覽(19)
  • Python+Appium實(shí)現(xiàn)自動(dòng)化測(cè)試的使用步驟

    這篇文章主要介紹了Python+Appium實(shí)現(xiàn)自動(dòng)化測(cè)試的使用步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 1.腳本語言:Python3.x IDE:安裝Pycharm 2.安裝Java JDK 、Android SDK 3.adb環(huán)境,path添加E:

    2024年02月03日
    瀏覽(26)
  • java APP自動(dòng)化測(cè)試AppIum

    java APP自動(dòng)化測(cè)試AppIum

    一、前言 二、Appium環(huán)境搭建 2.1 JDK安裝 2.2 Android SDK安裝配置 2.3 模擬器安裝及配置 2.4 Appium Desktop安裝及使用 2.5 Appium配置連接模擬器 三、實(shí)戰(zhàn)基本腳本編寫 3.1 創(chuàng)建Maven項(xiàng)目并配置 3.2 簡(jiǎn)單Demo 四、寫在最后 ? 一、 前言 隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,APP上面的測(cè)試逐漸的流行起來。

    2024年02月05日
    瀏覽(24)
  • 【APP自動(dòng)化測(cè)試必知必會(huì)】Appium之微信小程序自動(dòng)化測(cè)試

    【APP自動(dòng)化測(cè)試必知必會(huì)】Appium之微信小程序自動(dòng)化測(cè)試

    H5 是指第 5 代 HTML ,也指用 H5 語言制作的一切數(shù)字產(chǎn)品。 所謂 HTML 是“超文本標(biāo)記語言”的英文縮寫。我們上網(wǎng)所看到網(wǎng)頁,多數(shù)都是由 HTML 寫成的。 “超文本”是指頁面內(nèi)可以包含圖片、鏈接,甚至音樂、程序等非文字元素。而“標(biāo)記”指的是 這些超文本必須由包含屬性

    2024年02月09日
    瀏覽(122)
  • 使用Appium2.0自動(dòng)化規(guī)模測(cè)試APP

    最近做個(gè)項(xiàng)目需要測(cè)試服務(wù)端的并發(fā)性能,客戶端采用安卓,接口數(shù)據(jù)采用Restul和流媒體播放。由于流媒體的接口并不清楚,所以決定采用安卓虛擬機(jī)來模擬。 正好趕上Appium2.0升級(jí),網(wǎng)上的很多資料都不能用了,這里將整個(gè)環(huán)境搭建的要點(diǎn)記錄下來與大家分享。 #1. Appium2.0的

    2024年02月08日
    瀏覽(22)
  • app自動(dòng)化測(cè)試之Appium問題分析及定位

    app自動(dòng)化測(cè)試之Appium問題分析及定位

    使用 Appium 進(jìn)行測(cè)試時(shí),會(huì)產(chǎn)生大量日志,一旦運(yùn)行過程中遇到報(bào)錯(cuò),可以通過 Appium 服務(wù)端的日志以及客戶端的日志分析排查問題。 Appium Server日志-開啟服務(wù) 通過命令行的方式啟動(dòng) Appium Server,下面來分析一下啟動(dòng)日志,日志第一行顯示了 Appium 版本信息和服務(wù)在本地的運(yùn)行

    2024年02月14日
    瀏覽(29)
  • APP自動(dòng)化測(cè)試系列之Appium介紹及運(yùn)行原理

    APP自動(dòng)化測(cè)試系列之Appium介紹及運(yùn)行原理

    在面試APP自動(dòng)化時(shí),有的面試官可能會(huì)問Appium的運(yùn)行原理,以下介紹Appium運(yùn)行原理。 Appium是一個(gè)開源測(cè)試自動(dòng)化框架,可用于原生,混合和移動(dòng)Web應(yīng)用程序測(cè)試。它使用WebDriver協(xié)議驅(qū)動(dòng)IOS,Android和Windows應(yīng)用程序。 Appium是開源的移動(dòng)端自動(dòng)化測(cè)試框架; Appium可以測(cè)試原生的

    2024年02月13日
    瀏覽(23)
  • APP自動(dòng)化測(cè)試(2)-通過appium打開手機(jī)的應(yīng)用

    APP自動(dòng)化測(cè)試(2)-通過appium打開手機(jī)的應(yīng)用

    目錄 一、appium的Capabilities配置及Appium Inspector安裝 1.1安裝Appium Inspector 1.2Capabilities配置 二、獲取手機(jī)以及app的信息 2.1獲取連接設(shè)計(jì)的配置名稱 2.1.1連接手機(jī) 2.1.2獲取設(shè)備名稱 ?2.2利用adb獲取日志找到appPackage和appActivity? ?三、Start Session 3.1 安裝appium-doctor 3.2解決appium-doctor查出

    2024年02月08日
    瀏覽(62)
  • 全網(wǎng)最細(xì)最全Appium自動(dòng)化測(cè)試 iOS入門教程,App自動(dòng)化測(cè)試教程,精細(xì)整理

    全網(wǎng)最細(xì)最全Appium自動(dòng)化測(cè)試 iOS入門教程,App自動(dòng)化測(cè)試教程,精細(xì)整理

    目錄:導(dǎo)讀 一、MAC電腦上 Appium 的安裝流程 二、流程圖 三、下載AppiumServerGui和AppiumInspector 四、開始測(cè)試 ? ? ? 1、真機(jī)測(cè)試 ? ? ? ? ? ? ? ? 1.1 準(zhǔn)備工作 ? ? ? ? ? ? ? ? 1.2 獲取 開發(fā)包 .app 結(jié)尾 ? ? ? ? ? ? ? ? 1.3 WebDriverAgent使用 ? ? ? ? ? ? ? ? 1.4 配置 Appium Inspec

    2024年02月07日
    瀏覽(60)
  • 【python+appium】自動(dòng)化測(cè)試

    python+appium自動(dòng)化測(cè)試系列就要告一段落了,本篇博客咱們做個(gè)小結(jié)。 首先想要說明一下,APP自動(dòng)化測(cè)試可能很多公司不用,但也是大部分自動(dòng)化測(cè)試工程師、高級(jí)測(cè)試工程師崗位招聘信息上要求的,所以為了更好的待遇,我們還是需要花時(shí)間去掌握的,畢竟誰也不會(huì)跟錢過

    2024年02月14日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包