appium实战

发布时间 2023-07-07 23:37:00作者: jiang_jiayun
from appium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置链接appium服务器的参数
server = 'http://localhost:4723/wd/hub'
# 初始化设置
desired = {
  "platformName": "Android",
  "appPackage": "cn.kuwo.player",
  "appActivity": "cn.kuwo.player.activities.MainActivity",
  "platformVersion": "7.1.2",
  "deviceName": "SM-G9810"
}
# 建立模拟器
driver = webdriver.Remote(server,desired)
# 创建一个全局等待对象
wait = WebDriverWait(driver,15)

# 操作元素,获取数据
try:
    # 获取协议
    xy_id = 'cn.kuwo.player:id/tv_ok'
    wait.until(EC.presence_of_element_located((By.ID,xy_id)))
    xy_button = driver.find_element(By.ID,xy_id)
    xy_button.click()
except Exception as e:
    print('没有加载:获取页面 协议')

try:
    # 获取权限
    qx_id = 'cn.kuwo.player:id/tv_ok'
    wait.until(EC.presence_of_element_located((By.ID,qx_id)))
    qx_button = driver.find_element(By.ID,qx_id)
    qx_button.click()
except Exception as e:
    print('没有加载:获取页面 协议')

try:    
    # 访问文件权限
    f_id = 'com.android.packageinstaller:id/permission_allow_button'
    wait.until(EC.presence_of_element_located((By.ID,f_id)))
    f_button = driver.find_element(By.ID,f_id)
    f_button.click()
except Exception as e:
    print('没有加载:获取页面 协议')

try:
    # 获取登录页面
    login_id = 'cn.kuwo.player:id/iv_close'
    wait.until(EC.presence_of_element_located((By.ID,login_id)))
    login_button = driver.find_element(By.ID,login_id)
    login_button.click()
except Exception as e:
    print('没有加载:获取页面 协议')

try:
    # 获取广告
    guang_gao_id = 'cn.kuwo.player:id/iv_business_personal_dia_close'
    wait.until(EC.presence_of_element_located((By.ID,guang_gao_id)))
    guang_gao_button = driver.find_element(By.ID,guang_gao_id)
    guang_gao_button.click()
except Exception as e:
    print('没有加载:获取页面 协议')

# 获取排行榜
ph_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/androidx.viewpager.widget.ViewPager/android.widget.RelativeLayout/androidx.viewpager.widget.ViewPager/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.ListView/androidx.recyclerview.widget.RecyclerView/android.widget.RelativeLayout[2]/android.widget.ImageView'
wait.until(EC.presence_of_element_located((By.XPATH,ph_xpath)))
ph_button = driver.find_element(By.XPATH,ph_xpath)
ph_button.click()


# 获取歌单列表
list_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[4]/android.widget.ListView/android.widget.RelativeLayout[1]/android.widget.ImageView'
wait.until(EC.presence_of_element_located((By.XPATH,list_xpath)))
list_button = driver.find_element(By.XPATH,list_xpath)
list_button.click()

# # 获取音乐
# m_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.RelativeLayout/android.widget.LinearLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout[1]/android.widget.TextView'
# m = driver.find_element(By.XPATH,m_xpath).text
# print(m)

# 获取屏幕的宽,高
width = driver.get_window_size()['width']
height = driver.get_window_size()['height']
start_x = end_x = int(width*0.5)
start_y = int(height*0.75)
end_y = int(height*0.5)

flag = False
# 建立一个存放音乐的列表
all_music = []
while not flag:
    # 获取多个音乐
    n_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.RelativeLayout/android.widget.LinearLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout[1]/android.widget.TextView'
    many_n = [ele.text for ele in driver.find_element(By.XPATH,n_xpath)]
    for n in many_n:
        if n not in all_music:
            all_music.append(n)
            print(f'增加了音乐{n}')

    sleep(5)
    driver.swipe(start_x,start_y,end_x,end_y)
    sleep(1)

    try:
        end_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.RelativeLayout/android.widget.LinearLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.TextView'
        flag = driver.find_element(By.XPATH,end_xpath)
    except Exception as e:
        flag = False

m_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.RelativeLayout/android.widget.LinearLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout[1]/android.widget.TextView'
many_m =[ele.text for ele in driver.find_elements(By.XPATH,n_xpath)]
for m in many_m:
 # 判断捕捉的数据是否已存在
 if m not in all_music:
  all_music.append(m) 

print(all_music)


# '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.RelativeLayout/android.widget.LinearLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout[1]/android.widget.TextView'
# '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.RelativeLayout/android.widget.LinearLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout[1]/android.widget.TextView'