Appium+python自动化(十四)- 与Capability完美懈垢之解读(超详解)

news2024/11/25 21:14:29

简介

  Capability又叫Appium Desired Capabilities,前边写了那么多实例代码,小伙伴可以发现一些规律,就是有一部分代码总是重复的出现在你的视线中。这部分就是对Capability的配置。那么今天给小伙伴们分享、介绍和讲解一下Capability。让你知道她的来龙去脉,知道为什么代码里那么写。

1、 什么是Capability

  在讲capability之前大家是否还记得在讲log时给大家看过的启动时的日志?在我们的整个启动日志中会出现一些配置信息,其实那些信息就是capability携带的配置信息,如果我们通过代码来启动我们能够看见的配置信息如下:

  通过上面的配置信息大家可以看出,在python里面我们所讲的capability其实就是一个字典(我们这里暂且这么说,因为每个语言叫法不一样)。

2、 Capability的作用

  我们知道Capability是一个字典之后我们是否需要知道他的作用呢?我们在appium中配置app后我们能够通过log看出里面的信息都是启动的一些必要配置,通过上面的配置信息我么也能够看出capability配置的就是我们做自动化的一些必要信息。他主要是告诉server我们本次测试是浏览器还是app,是ios还是android以及android的版本信息等。如果capability不告诉server,那么server就不认识你,也就无法完成我们的自动化测试。

3、 常用Capability配置讲解

3.1 公用Capability

  如果有了解过Capability的人会发现一个问题,其实他主要分成了三部分:公共部分、ios部分、android部分,如果你android想用ios的那是不可能的,so,老老实实去了解每个平台有哪些,他们的作用是什么。下面我们介绍一些公用常用的

能力

描述

automationName

使用哪个自动化引擎

Appium(默认)或Selendroid或者UiAutomator2或者Espresso对于Android或XCUITestiOS或者YouiEngine使用You.i引擎构建的应用程序

platformName

使用哪个移动操作系统平台

iOS,Android或FirefoxOS

platformVersion

移动操作系统版本

例如7.1,4.4

deviceName

使用的移动设备或模拟器的种类

iPhone Simulator,iPad Simulator,iPhone Retina 4-inch,Android Emulator,Galaxy S4,等....在iOS上,这应该是与仪器返回的有效设备之一instruments -s devices。在Android上,这个功能目前被忽略,尽管它仍然是必需的。

app

一个或一个文件的绝对本地路径远程http URL ,或者包含其中的一个。Appium将首先尝试在适当的设备上安装这个应用程序二进制文件。请注意,如果您指定和功能(请参阅下文),则此功能对于Android不是必需的。与...不兼容。.ipa.apk.zipappPackageappActivitybrowserName

/abs/path/to/my.apk 要么http://myapp.com/app.ipa

browserName

移动网页浏览器的名称自动化。应该是一个空字符串,而不是自动化应用程序。

适用于iOS的“Safari”,适用于Android的“Chrome”,“Chromium”或“浏览器”

newCommandTimeout

在假定客户端退出并结束会话之前,Appium将等待来自客户端的新命令(以秒为单位)

例如 60

language

(Sim / Emu-only)为模拟器/仿真器设置的语言

例如 fr

locale

(Sim / Emu-only)为模拟器/仿真器设置的语言环境

例如 fr_CA

udid

连接的物理设备的唯一设备标识符

例如 1ae203187fc012g

orientation

(Sim / Emu-only)从某个方向开始

LANDSCAPE 要么 PORTRAIT

autoWebview

直接进入Webview上下文。默认false

true, false

noReset

在此会话之前不要重置应用程序状态。在这里看到更多的细节

true, false

fullReset

执行完整的重置。在这里看到更多的细节

true, false

eventTimings

启用或禁用各种Appium内部事件的时间报告(例如,每个命令的开始和结束等)。默认为false。启用,使用true。然后将这些时间作为events回应查询当前会话的财产报告。请参阅事件时间文档了解此响应的结构。

例如, true

enablePerformanceLogging

(仅限Web和webview)启用Chromedriver(在Android上)或Safari(在iOS上)性能记录(默认false)

true, false

最常用的:

能力

描述

automationName

使用哪个自动化引擎

Appium(默认)或Selendroid或者UiAutomator2或者Espresso对于Android或XCUITestiOS或者YouiEngine使用You.i引擎构建的应用程序

platformName

使用哪个移动操作系统平台(你要测试手机的操作系统)

iOS,Android或FirefoxOS

platformVersion

移动操作系统版本(手机操作系统版本)

android或者ios版本,例如7.1,4.4

deviceName

使用的移动设备或模拟器的种类

iPhone Simulator,iPad Simulator,iPhone Retina 4-inch,Android Emulator,Galaxy S4,等....在iOS上,这应该是与仪器返回的有效设备之一instruments -s devices。在Android上,这个功能目前被忽略,尽管它仍然是必需的。

app

apk或者ipa文件所在的路径

xxx/xxx.apk

browserName

浏览器名称Chrome

newCommandTimeout                   

超时时间60

language

手机或者模拟器语言

udid

连接设备的uid1essd2fd3

noReset

不要在会话前重置应用状态,默认falsetrue/false

在自动化测试过程中这些公用的Capability用的时间比较多,大家需要记住,去熟悉他的用法。

3.2 Android独有Capability

  在自动化测试过程中如果你只知道常用的一些参数配置,这个是远远达不到要求,因为你不知道什么时候有什么样的突发情况发生,所以你需要了解appium所有最常用的配置参数,当然你可以掌握所有,那样更好,熟能生巧。下面我们看一下android的Capability。

这些功能仅适用于基于Android的驱动程序(例如 UiAutomator2)。

能力

描述

appActivity

要从包中启动的Android活动的活动名称。这往往需要在一个.(例如,.MainActivity而不是MainActivity)

MainActivity, .Settings

appPackage

你想运行的Android应用程序的Java包

com.example.android.myApp, com.android.settings

appWaitActivity

活动名称/名称,逗号分隔,您想要等待的Android活动

SplashActivity,SplashActivity,OtherActivity,*,*.SplashActivity

appWaitPackage

您想等待的Android应用程序的Java包

com.example.android.myApp, com.android.settings

appWaitDuration

用于等待appWaitActivity启动的超时(以毫秒为单位20000)(默认)

30000

deviceReadyTimeout

在等待设备准备就绪的几秒钟内超时

5

androidCoverage

完全合格的仪器类。通过-w在adb shell中,仪器-e覆盖率为true -w

com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentation

androidCoverageEndIntent

由您自己执行的广播操作,用于将覆盖转储到文件系统。传递到-a在adb外壳广播-a

com.example.pkg.END_EMMA

androidDeviceReadyTimeout

用于等待设备在启动后准备就绪的秒数

例如, 30

androidInstallTimeout

用于等待apk安装到设备的超时(以毫秒为单位)。默认为90000

例如, 90000

androidInstallPath

安装前将在其中安装apk的设备上的目录名称。默认为/data/local/tmp

例如 /sdcard/Downloads/

adbPort

用于连接到ADB服务器的端口(默认5037)

5037

remoteAdbHost

可选的远程ADB服务器主机

例如:192.168.0.101

androidDeviceSocket

Devtools套接字名称。只有当测试的应用程序是Chromium嵌入式浏览器时才需要。套接字由浏览器打开,并且Chromedriver作为devtools客户端连接到它。

例如, chrome_devtools_remote

avd

avd的名称发射

例如, api19

avdLaunchTimeout

avd启动并连接到ADB需要多长时间(默认值120000)

300000

avdReadyTimeout

avd完成启动动画需要多长时间(默认120000)

300000

avdArgs

启动avd时使用的其他仿真器参数

例如, -netfast

useKeystore

使用自定义密钥库来签署apks,默认 false

true 要么 false

keystorePath

自定义密钥库路径,默认〜/ .android / debug.keystore

例如, /path/to.keystore

keystorePassword

自定义密钥库的密码

例如, foo

keyAlias

密钥的别名

例如, androiddebugkey

keyPassword

密钥的密钥

例如, foo

chromedriverExecutable

webdriver可执行文件的绝对本地路径(如果Chromium embedder提供了自己的webdriver,则应该使用它来代替与Appium捆绑在一起的原始chromedriver)

/abs/path/to/webdriver

autoWebviewTimeout

等待Webview上下文激活的时间(以毫秒为单位)。默认为2000

例如 4

intentAction

意图操作将用于启动活动(默认android.intent.action.MAIN)

例如android.intent.action.MAIN,android.intent.action.VIEW

intentCategory

意图类别,将用于启动活动(默认android.intent.category.LAUNCHER)

例如android.intent.category.LAUNCHER,android.intent.category.APP_CONTACTS

intentFlags

将用于启动活动的标志(默认0x10200000)

例如 0x10200000

optionalIntentArguments

将用于启动活动的其他意图参数。请参阅意向参数

例如--esn <EXTRA_KEY>,--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>等等。

dontStopAppOnReset

在使用adb启动应用程序之前,不要停止被测试的应用程序的进程。如果被测试的应用程序是由另一个定位应用程序创建的,那么将其设置为false将允许在使用adb的测试应用程序启动过程中定位应用程序的过程仍然存在。换句话说,在dontStopAppOnReset设置的时候true,我们不会-S在adb shell am start通话中包含标志。有了这个能力被省略或设置为false,我们包括-S标志。默认false

true 要么 false

unicodeKeyboard

启用Unicode输入,默认 false

true 要么 false

resetKeyboard

使用unicodeKeyboard功能运行Unicode测试后,将键盘重置为原始状态。如果单独使用,则忽略。默认false

true 要么 false

<p style="white-space: nowrap;">noSign

使用调试键跳过检查和签名应用程序,只能使用UiAutomator,而不能使用selendroid,默认false

true 要么 false

ignoreUnimportantViews

调用setCompressedLayoutHierarchy()uiautomator函数。此功能可以加快测试执行速度,因为辅助功能命令将更快地忽略某些元素。被忽略的元素是不可能找到的,这就是为什么这个功能也被实现为可切换的设置以及功能。默认为false

true 要么 false

disableAndroidWatchers

禁用观察应用程序没有响应和应用程序崩溃的android观察者,这将减少Android设备/模拟器上的CPU使用率。这个功能只能用于UiAutomator,而不能用于selendroid,默认false

true 要么 false

chromeOptions

允许ChromeDriver传递chromeOptions功能。有关更多信息,请参阅chromeOptions

chromeOptions: {args: ['--disable-popup-blocking']}

recreateChromeDriverSessions

在移至非ChromeDriver网页浏览的情况下杀死ChromeDriver会话。默认为false

true 要么 false

nativeWebScreenshot

在Web上下文中,使用本地(adb)方法截取屏幕截图,而不是代理ChromeDriver。默认为false

true 要么 false

androidScreenshotPath

将要放置屏幕截图的设备上的目录名称。默认为/data/local/tmp

例如 /sdcard/screenshots/

autoGrantPermissions

让Appium自动确定您的应用程序需要哪些权限,并在安装时将其授予应用程序。默认为false

true 要么 false

networkSpeed

设置网络速度模拟。指定最大的网络上传和下载速度。默认为full

['full','gsm', 'edge', 'hscsd', 'gprs', 'umts', 'hsdpa', 'lte', 'evdo']检查-netspeed选项有关avds速度仿真的更多信息

gpsEnabled

在开始会话之前,切换模拟器的gps位置提供程序。默认情况下,仿真器将根据设置的方式启用或不启用此选项。

true 要么 false

isHeadless

true当不需要显示设备显示时,将此功能设置为无运行模拟器。false是默认值。isHeadless也支持iOS,请检查XCUITest的具体功能。

例如, true

  上面的只是一些简单的列子,主要的功能是告诉大家,这些是我们经常用的,如果遇见类似的需求那么可以直接使用,也希望大家看到这里的时候自己动手去操作一下,看他执行的结果到底是怎么样。只有这样你才能算掌握,只是看一遍还是不行的。

3.3 ios独有Capability

  在我选择appium时,最主要是因为他能够同时支持ios和android,在基础参数配置中ios也有他自己的独一份,不和android一样,下面我们大概介绍一下:

  BoundleId:这个是必须的,如果不配置就无法启动ios app,这个是该app的唯一标示。eg:caps.setCapability("boundleId","ios.mooc.test"),这个只是一个简单的例子。

  autoAcceptAlerts: 这个在我们实际项目中非常实用,他就想web端的一个js弹窗,默认情况下是false,如果你的app中有类似情况建议打开。eg:caps.setCapability("autoAcceptAlerts","true")

  这些功能仅适用于XCUITest驱动程序和过时的UIAutomation驱动程序。

能力

描述

calendarFormat

(仅限SIM)为iOS模拟器设置的日历格式

例如 gregorian

bundleId

测试中的应用程序的捆绑ID。用于在真实设备上启动应用程序或在测试启动期间使用其他需要包ID的大写字母。要使用软件包ID在真实设备上运行测试,可以省略“应用”功能,但必须提供“udid”。

例如 io.appium.TestApp

udid

连接的物理设备的唯一设备标识符

例如 1ae203187fc012g

launchTimeout

假设它挂起和失败会话之前以毫秒为单位等待仪器的时间

例如 20000

locationServicesEnabled

(仅限SIM)强制定位服务处于打开或关闭状态。默认是保持当前的模拟设置。

true 要么 false

locationServicesAuthorized

(仅限SIM)通过plist将位置服务设置为授权或未授权,以便位置服务警报不会弹出。默认是保持当前的模拟设置。请注意,如果您使用此设置,您还必须使用该bundleId功能发送您的应用的捆绑ID。

true 要么 false

autoAcceptAlerts

如果弹出,则自动接受所有iOS警报。这包括隐私访问权限提醒(例如,位置,联系人,照片)。默认是false。不适用于XCUITest基于测试。

true 要么 false

autoDismissAlerts

如果弹出,则自动关闭所有iOS警报。这包括隐私访问权限提醒(例如,位置,联系人,照片)。默认是false。不适用于XCUITest基于测试。

true 要么 false

nativeInstrumentsLib

使用本机intruments lib(即禁用仪器,无延迟)。

true 要么 false

nativeWebTap

(仅限SIM)在Safari中启用“真实”,非基于JavaScript的网页浏览。默认:false。警告:根据视口的大小/比例,这可能无法准确地点击一个元素

true 要么 false

safariInitialUrl

(仅限SIM)(> = 8.1)初始Safari浏览器网址,默认为本地欢迎页面

例如 https://www.github.com

safariAllowPopups

(仅限Sim)允许JavaScript在Safari中打开新窗口。默认保持当前的模拟设置

true 要么 false

safariIgnoreFraudWarning

(仅限SIM)防止Safari显示欺诈网站警告。默认保持当前的模拟设置。

true 要么 false

safariOpenLinksInBackground

(仅限SIM)Safari是否应允许在新窗口中打开链接。默认保持当前的模拟设置。

true 要么 false

keepKeyChains

(Sim-only)当appium会话开始/结束时是否保留钥匙串(Library / Keychains)

true 要么 false

localizableStringsDir

在哪里寻找可本地化的字符串。默认en.lproj

en.lproj

processArguments

使用工具传递给AUT的参数

例如, -myflag

interKeyDelay

输入时发送到元素的击键之间的延迟,以毫秒为单位。

例如, 100

showIOSLog

是否显示从appium日志中的设备捕获的任何日志。默认false

true 要么 false

sendKeyStrategy

用于将测试类型输入测试领域的策略。模拟器默认:oneByOne。实际设备默认值:grouped

oneByOne,grouped或者setValue

screenshotWaitTimeout

以秒为单位的最大超时等待生成屏幕截图。默认:10

例如, 5

waitForAppScript

ios自动化脚本用于确定应用程序是否已启动,默认情况下系统等待页面源不为空。结果必须是布尔值

例如true;,target.elements().length > 0;,$.delay(5000); true;

webviewConnectRetries

向远程调试器发送连接消息以获取webview的次数。默认:8

例如, 12

appName

被测应用程序的显示名称。用于在iOS 9+中自动化后台应用程序。

例如, UICatalog

customSSLCert

(仅限Sim / Emu)向模拟器添加SSL证书。

例如 
-----BEGIN CERTIFICATE-----MIIFWjCCBEKg...
-----END CERTIFICATE-----

webkitResponseTimeout

(仅限实际设备)设置时间(以毫秒为单位)以等待Safari会话中WebKit的响应。默认为5000

例如, 10000

4、Capability实战

  当我们知道基础的Capability 如何使用时,大家是否觉得现在我们已经就可以原原本本的照着去执行了呢?其实没错,是可以照样去执行。但是你有思考过一个问题吗?如果你的app变化了?你的package变化了?你的手机变化了?你的版本变化了等等你怎么去实现?你是不是还需要到程序里面来更改代码?low吗?要想不low我们接着往下看。

 1 # coding=utf-8
 2 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 3 
 4 # 2.注释:包括记录创建时间,创建人,项目名称。
 5 '''
 6 Created on 2019-7-05
 7 @author: 潇潇说测试
 8 Project:学习和使用appium自动化测试-与Capability完美懈垢之解读
 9 '''
10 # 3.导入模块
11 from appium import webdriver
12 import time
13 import os
14 
15 def testCase(platformName,platformVersion,deviceName,app,appPackage,appActivity,port):
16    PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
17    desired_caps = {}
18    desired_caps['platformName'] = platformName #设置平台
19    desired_caps['platformVersion'] = platformVersion #系统版本
20    desired_caps['deviceName'] = deviceName #设备id
21    desired_caps['autoLaunch'] = 'true' #是否自动启动
22    desired_caps['app'] = PATH(app)#安装包路径,放在该py文件的目录下)
23    desired_caps['appPackage'] = appPackage #包名
24    desired_caps['appActivity'] = appActivity #启动的activity
25    self.driver = webdriver.Remote('http://localhost:%s/wd/hub', desired_caps) % port

  从上面的代码我们可以和之前的代码进行比较,大家是否发现了一些不同之处。在做自动化时我们一定要保持数据的灵活性,所以在这里我们做了一些小小的改变,我们将所有的数据都改变成了变量,变量从何而来这个我们后面可能会讲,这个会去读取配置文件。现在从代码层面来看是否要比之前的代码更有可读性呢?其实现实中并不是这样,有更高级的版本,这个后面有时间再讲。

  在代码的第11行大家注意一个问题没有,在一个字符串中间我使用了一个%s,这个在python里面代表的意思是取一个变量,这个变量是我后面跟着的 port 这个变量的值,这里唯一的有问题就是这里。

5、小结

 1、想要更详细了解的小伙们,可以看一下官方文档:

官方文档:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

  好了,今天就给小伙伴们分享到这里了。


              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战


四、App自动化项目实战

五、一线大厂简历


六、测试开发DevOps体系

七、常用自动化测试工具


八、JMeter性能测试

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/774259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3的组件中使用slot

场景&#xff1a;在写好的表格组件中&#xff0c;需要在写好的默认操作的基础上&#xff0c;具备另外的操作。使用slot 组件里面只有修改功能&#xff0c;另外两个功能自己加。 页面中使用具名插槽插入自己需要的其他功能。 也可以直接使用 <slot></slot>直接插入内…

AOS | Type-C端口的ESD解决方案

日前&#xff0c;集设计研发、生产和全球销售一体的著名功率半导体及芯片供应商Alpha and Omega Semiconductor Limited &#xff08;AOS, 纳斯达克代码:AOSL) 推出了一系列单通道瞬态电压抑制器 (TVS)——AOZ8S303BLS-24 和AOZ8S305BLS-24。该系列产品采用同类最佳的低电容TVS…

实验数据管理与分析系统【双库实现】

一、介绍 实验数据管理与分析系统&#xff0c;实现了对实验数据和统计数据的备份、统一管理、可视化分析展示、操作日志展示等功能。系统角色分为管理员与普通用户&#xff0c;普通用户可以上传实验数据到系统主库&#xff0c;将主库数据迁移到从库并进行操作&#xff0c;然后…

idea集成jrebel完成热部署

idea集成jrebel完成热部署 今天想把idea设置成热部署&#xff0c;结果按照教程设置完还是不行&#xff08;一般教程请自行百度&#xff09;。实在受不了了就集成jrebel插件来完成热部署 一、下载插件 首先在idea的settings里的plugs搜索jrebel&#xff0c;将插件安装&#xff…

写字楼/办公楼能源管理系统的具体应用 安科瑞 许敏

0 引言 随着社会的进步&#xff0c;我国经济的快速发展&#xff0c;企业的办公环境和方式发生了巨大的变化&#xff0c;专业的写字楼在各大城市遍布林立。写字楼的出现使得各地企业办公集中化、高效化&#xff0c;然而写字楼物业管理的同步发展对于企业服务来说更是一个很大的…

HarmonyOS/OpenHarmony元服务开发-ArkTS卡片相关模块

图1 ArkTS卡片相关模块 FormExtensionAbility&#xff1a;卡片扩展模块&#xff0c;提供卡片创建、销毁、刷新等生命周期回调。 FormExtensionContext&#xff1a;FormExtensionAbility的上下供接口实现更新卡片、设置卡片更新时间、获取卡片信息、请求发布卡片等。 formIn…

高精尖领域数据暴增,分布式存储渐当大任

近年来&#xff0c;数据存储市场“最靓的仔”无疑就是分布式存储。 大模型火了之后&#xff0c;围绕Chat的应用也越来越多&#xff0c;通过AI生成图片、报表、音视频的应用比比皆是。众所周知&#xff0c;要想训练出一个有学习能力的、可理解的、响应迅速的大模型应用&#xf…

Hook技术 - 某站cookie解析

本文仅供学习交流&#xff0c;只提供关键思路不会给出完整代码&#xff0c;严禁用于非法用途&#xff0c;若有侵权请联系我删除&#xff01; 目标网站&#xff1a;aHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLw 目标接口&#xff1a;Cmh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRl…

小程序逆向动态调试及修复过程

微信小程序逆向 : https://codeooo.blog.csdn.net/article/details/120219900 一 &#xff1a;_typeof3 is not a function 小程序解包之后&#xff0c;在微信开发者工具当中点开调试器&#xff0c;选择Console选项卡&#xff0c;发现左侧的预览界面是空白的&#xff0c;虽然…

leetcode 40. 组合总和 II

2023.7.19 此题为 组合总和 的升级版。本题的特殊之处在于 给定的candidates数组只一个无序且包含重复元素的数组&#xff0c;并且最终的解集不能包含重复的组合。 所以本题的关键在于去重。那么&#xff0c;此类题的去重分为两种&#xff0c;一种是解集内部去重&#xff0c;灵…

设计模式-享元模式在Java中的使用示例-围棋软件

场景 享元模式 简介 当一个软件系统在运行时产生的对象数量太多&#xff0c;将导致运行代价过高&#xff0c;带来系统性能下降等问题。 例如在一个文本字符串中存在很多重复的字符&#xff0c;如果每一个字符都用一个单独的对象来表示&#xff0c;将会占用 较多的内存空间…

【网络】网络编程套接字

目录 一、预备知识 1、网络通信理解 2、源IP地址和目的IP地址 3、端口号 二、网络字节序 三、socket编程接口 1、socket常见API 2、sockaddr结构 3、sockaddr结构体 3.1、sockaddr结构体 3.2、sockaddr_in结构体 四、简单的UDP网络程序 1、创建套接字接口 2、绑定…

C# OpenCvSharp 直方图均衡化 图像去雾

直方图 直方图均衡化 自适应的直方图均衡化 全局直方图均衡化 局部直方图均衡化 对比度调整 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; us…

TRT3-trt-basic - 5.1 封装插件

之前TRTbasic4是新增插件&#xff0c;这次我们看看不新增插件&#xff0c;仅凭封装可不可以达到一样的功能 首先可以看到这次的g.op不再是MYSELU了&#xff0c;而是plugin&#xff0c;那为什么.cu还能识别出来呢&#xff1f; 是因为在这里做了一个通用的plugin DEFINE_BUILTIN…

常用API学习03(Java)

String char charAt(int index) 返回char指定索引处的值 char[] toCharArray() 将此字符串转换为新的字符数组 int compareTo(String anotherString) 按字典顺序比较两个字符串 boolean contains(CharSequence s) 当且仅当此字符串包含指定的char值序列才返…

osg osgQt模块 基于 QGLWidget 源码分析

osgQt基于QGLWidget实现了在Qt窗口内OSG渲染操作。Qt以其开源、跨平台、方便快捷、现代化的界面风格等优点&#xff0c;已经成为了目前桌面版CAD/CAE/CAM等软件开发的首选组件。因此&#xff0c;非常有必要在OSG的基础之上&#xff0c;研究Qt桌面系统内集成OSG渲染功能的相关技…

Linux查看机器内存空间

执行 fdisk命令查看磁盘空间 fdisk -l更多方法参考&#xff1a; Linux检查磁盘空间

一种工业机器人绝对精度的提升方法

摘要&#xff1a;一种新的校准方法&#xff0c;使用动作捕捉作为测量工具&#xff0c;利用ELM神经网络作为非几何误差源补偿&#xff0c;提升工业机器人的绝对精度。 工业机器人的绝对精度是评估其综合性能的重要指标之一。然而&#xff0c;由于机器人受到多种因素的影响&#…

概率论的学习和整理19:条件概率我知道,但什么是条件期望?---用来解决递归问题(草稿)

目录 1 目标问题&#xff1a; 什么是条件期望&#xff1f; 条件期望有什么用&#xff1f; 2 条件期望&#xff0c;全期望公式 3 条件期望&#xff0c;全期望公式 和 条件概率&#xff0c;全概率公式的区别和联系 3.1 公式如下 3.2 区别和联系 3.3 概率和随机过程 4 有什…

8年软件测试工程师感悟 —— 写给还在迷茫中的朋友

去年还在全网声讨互联网企业996呢&#xff0c;今年突然没声音了&#xff0c;也不用讨论在哪个路灯上吊死互联网资本家了&#xff0c;因为都被裁了。 继教育培训领域大幅度裁员之后&#xff0c;大厂裁员消息也开始陆续传出&#xff0c;百度AIG,MEG多条业务线进行精简&#xff0…