appium简单学习

  从A.py文件中引入另一个B.py文件中的函数等功能。 其中A叫顶层文件。
  A中引入B的语句:
      import B的文件名
      from 文件名 import 函数名
 
------------------------------------------------------------------------------------------------------------------
appium关键字

安装,启动apk需要设置的一些关键字
platformVersion    版本4.4
platformName       Android
     //微信
appPackAge        com.tencent.mm
appActivity       ui.LauncherUI
//支持中文输入
uicodeKeyboard True   
//重置输入法为系统默认
resetKeybord True
//安装时不对apk进行重签名,这个设置很重要,否则有的apk重签名后无法使用。
noSign    True

    appium基础操作
 1、sendkeys 向输入框输入内容
driver.find_element_by_id('com.tencent.mm:id/cfl').sendkeys('123')
2、click 点击元素
driver.find_element_by_name("5").click()
3、tab 点击屏幕
4、swipe 滑动屏幕
5、longPress长按某元素或者某坐标点




---------------------------------------------------------------------------------------------------------------------
swipe的使用?
swipe(x起点,y起点,x终点,y终点,滑动时间毫秒计算)
可以先算出手机屏幕的长和宽:
drive
知道长和宽,屏幕、


swipe有另外一个而功能是:长按,从当前滑动到当前,滑动时间为2秒
driver.swipe(500,640,500,640,2000);
---------------------------------------------------------------------------------------------------------------------
如何点击某一坐标:
driver.tap([(350,600),])


---------------------------------------------------------------------------------------------------------------------
如何获取自己的platformVersion,deviceName,appPackage,appActivity


--------------------------------------------platformVersion如何知道多少?--------------------------------------------
查看机子安卓版本号,在对照

-------------------------------------------------------------------------------------------------------------
deviceName如何获取?
答:cmd窗口输入adb devices,返回:
MYVDU15929022742        device


-------------------------------------------------------------------------------------------------------------
package和activity的获取?
答:cmd窗口输入adb logcat>D:log.txt 命令,手机中,点击打开软件,日志会打印在txt中
去txt文件查找关键字:Displayed com  后 Displayed com.tencent.mm/.plugin.sns.ui.SnsBrowseUI
package name = com.tencent.mm,
activity=ui.LauncherUI
    -----------------------------------------------------------------------------------------------------------------
'http://localhost:4723/wd/hub' 和“http://127.0.0.1:4723/wd/hub”什么意思?
答:本机开辟的一个4723端口,用来与appium交互
----------------------------------------------------------------------------------------------------------
android关键字如何传递?
答:
from appium import webdriver


desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '21'
desired_caps['deviceName'] = 'MYVDU15929022742'
desired_caps['appPackage'] = 'com.android.calculator2'
desired_caps['appActivity'] = '.Calculator'


driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)   //使用远程方法remote将关键字参数传递给webdriver


----------------------------------------------------------------------------------------------------------


apk如何安装到真机或虚拟机的配置
desired_caps['app'] = PATH('E:\Test\sdk\platform-tools\LoadActivity.apk')


------------------------------------------------------------------------------------------------
selenium实现在火狐浏览器打开谷歌并进行搜索并关闭3s后浏览器
from selenium import webdriver
import time


driver = webdriver.Firefox()
driver.get('https://www.google.com.hk/')
driver.find_element_by_id('lst-ib').send_keys('腾讯nba')
driver.find_element_by_name('btnK').click()


time.sleep(3)
driver.quit()

--------------------------------------------------------------------------------------------------------

selenium实现打开禅道登录,页面对所有复选框打钩并勾掉



from selenium import webdriver
import time
#使用火狐浏览器打开禅道
driver = webdriver.Firefox()
driver.get('http://zentao.avatarworks.com/index.php?m=user&f=login&referer=L2luZGV4LnBocD9tPXRlc3RjYXNlJmY9YnJvd3NlJnJvb3Q9MSZicmFuY2g9JnR5cGU9YnlNb2R1bGUmcGFyYW09MjM=')
#睡眠一秒,否则html页面还没加载完成,找不到控件。。。。
time.sleep(1)  
#页面中输入账号密码,点击登录
driver.find_element_by_id('account').send_keys('wangxh')
driver.find_element_by_name('password').send_keys('123456')
driver.find_element_by_id('submit').click()
#打开要重定向的页面
driver.get('http://zentao.avatarworks.com/index.php?m=testcase&f=browse&root=1&branch=&type=byModule&param=23')
#设置浏览器大小,并获取页面中所有的checbox,通过循环点击所有的checkbox
#driver.maximize_window()  浏览器最大化
driver.set_window_size(2000,1200)
cb = driver.find_elements_by_name('caseIDList[]')
for checkbox in cb:
    checkbox.click()
#等待3s后,将所有的打钩全部去掉
time.sleep(3)
cb2 = driver.find_elements_by_name('caseIDList[]')
for checkbox in cb2[::-1]:
    checkbox.click()


#7s后退出
time.sleep(7)
driver.quit()
----------------------------------------------------------------------------------------------------------------
cmd查看自己创建的模拟器:
android - list avd
---------------------------------------------
cmd命令行如何打开安卓模拟器:
emulator @Android5.1.1
其中@后面是AVD的名称(自己设定的那个)
---------------------------------------------------------------
cmd命令如何知道电脑支援的模拟器类型。
>>android - list target
---------------------------------------------------------------------------------------------------------
获取activity的几种方法
方法一:
打开应用,cmd窗口中输入如下命令
>adb shell
>dumpsys window w
日志中查找activity


方法二:
1、打开应用
2、cmd输入:adb logcat>D:\ log.txt
            ctrl + C
3、日志中查找activity




方法三:个人感觉界面看的比较清楚
1、打开应用
2、cmd窗口输入:adb shell
                logcat | grep START
3、直接查找


方法四:
1、将apk文件放入appium里面,会直接产生AppPackBag和Activity,但这个获取的activity和上面
的不同,这个是第一次安装应用的activity,上面的是安装后的Activity。


---------------------------------------------------------------------------------------------
如何关闭appium服务:
>adb kill-server
>adb start-server
起到关闭重启的作用
----------------------------------------WebDriverWaite的使用--------------------------------
导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
代码:
        WebDriverWait(driver,40).until(
            expected_conditions.presence_of_all_elements_located((By.CLASS_NAME,"android.widget.ImageView"))
或者
            expected_conditions.presence_of_element_located((By.CLASS_NAME,"android.widget.ImageView"))
        )
解释:
presence_of_element_located: 判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是'column-md-3',那么只要有1个元素存在,这个方法就返回True
presence_of_all_elements_located: 判断某组元素是否被加到了dom树里,并不代表该元素一定可见


-----------------------------------------------genmotion虚拟机无法安装本地app----------------------------------
需要下载一个叫做:Genymotion-ARM-Translation_v1.1.zip 的文件,然后拖到虚拟手机上,重启手机,接下去吧apk拉到虚拟手机上就可以了


--------------------------------------------------静态方法的优点---------------------------------------------------
1、声明静态方法后由于不需要实例化,会直接占据内存,然后访问的速度会更快,但不适合写太多静态类,这样内存占用太高


-------------------------------------------------------为什么使用类方法和静态方法--------------------------------
类方法是为了访问类属性更加方便
类方法和静态方法可以通过类和实例来访问,效果是相同的
静态方法跟普通函数没有什么区别

class a:
    def a1(self):
        print('a1')
    @staticmethod
    def a2():
        print("a2")
    @classmethod
    def a3(cls):
        print('a3')


A = a()
# a.a1()


类和对象都可调用静态方法
a.a2()
A.a2()
类和对象都可以调用类方法
a.a3()
A.a3()


------------------------自动化把每一条用例写在一个py文件中再用一个主py文件调用所有的用例-----------------
1、需要在主文件中引入该用例文件:from 文件名 import xxx.py
2、在用例中不需要引入该主文件,两个模块之间不能互相引用,要想象那种一层调用一层方法
3、所有的用例文件都导入了登录模块import login,在用例中调用中都必须调用到:文件名.方法(self)
4、所有文件的driver前面都要加self,self.driver
5、driver不必声明为全局变量global
6、在main_test文件中的用例方法调用时,先sleep一下,不然可能永远也无法成功,原本不行,sleep一下就可以了,然后不用sleep也可以了,奇怪
他妈这个这么简单我居然搞了差不多3个礼拜


----------------------------------------------------------------------------------------------------------------------------------
关闭某个端口
查询该端口的lintener  >>netstat -ano | findstr "5037"
关闭该端口的linterner,5924  >>taskkill /f /pid 5924


---------------------------------------------------------------------------------------------------------
pycharm对代码进行格式化:
1、ctrl+alt+L可以格式化,但是和锁屏快捷键冲突。 


2、也可以,选中代码,使用快捷键 ctrl+alt+i 

猜你喜欢

转载自blog.csdn.net/wanggaoxingh/article/details/79525460
今日推荐