中文字幕人妻中文_99精品欧美一区二区三区综合在线_精品久久久久一区二区_色月丁香_免费福利在线视频_欧美大片免费观看网址_国产伦精品一区二区三区在线播放_污污污污污污www网站免费_久久月本道色综合久久_色69激情爱久久_尹人香蕉久久99天天拍_国产美女www_亚洲国产精品无码7777一线_五月婷婷六月激情_看免费一级片_精品久久久久久成人av_在线色亚洲_女人另类性混交zo_国产精品青青在线观看爽香蕉_人人澡人人添人人爽一区二区

主頁 > 知識庫 > 使用swipe方法模擬屏幕滑動與手勢密碼繪制

使用swipe方法模擬屏幕滑動與手勢密碼繪制

熱門標簽:鶴壁外呼系統公司 臨沂ai電銷機器人招商 華創e路航彩票銷售點地圖標注 銀川語音外呼系統中心 揭陽電腦外呼系統公司 外呼系統號顯示星號怎么看 高德地圖標注常顯 suitecrm 地圖標注 承德地圖標注公司收費

前言

App自動化測試中有兩個很重要的操作,屏幕滑動與繪制手勢密碼。目前很多App在啟動時,都存在啟動時的引導動畫或者加載上下文內容時需要手動上滑或者下滑加載頁面,所以在自動化測試的過程中模擬手的滑動操作看起來就很重要了;第二個比較重要的是模擬手動繪制九宮格完成手勢密碼的設置,這種手勢密碼在我了解的范圍內,大多在金融類的app中最常見,還有一些對用戶信息保密性較好的app中,所以,模擬繪制手勢密碼也是app自動化測試中必須掌握的操作,那么接下來我們就開始講解兩種操作該如何實現, 在進入正題之前,你還應該知道,手機中橫縱坐標的原點是從屏幕的左上角頂點(0, 0)的位置開始的

滑動屏幕

swipe方法

模擬滑動屏幕的操作,我們通過swipe方法實現,先看一下這個方法的源代碼

def swipe(self, start_x, start_y, end_x, end_y, duration=None):
  """Swipe from one point to another point, for an optional duration.
  Args:
   start_x (int): x-coordinate at which to start
   start_y (int): y-coordinate at which to start
   end_x (int): x-coordinate at which to stop
   end_y (int): y-coordinate at which to stop
   duration (:obj:`int`, optional): time to take the swipe, in ms.
  Usage:
   driver.swipe(100, 100, 100, 400)
  Returns:
   `WebElement`
  """
  # `swipe` is something like press-wait-move_to-release, which the server
  # will translate into the correct action
  action = TouchAction(self)
  action \

   .press(x=start_x, y=start_y) \

   .wait(ms=duration) \

   .move_to(x=end_x, y=end_y) \

   .release()
  action.perform()
  return self

參數

start_x, start_y : 表示開始滑動時的初始坐標,也就是從哪里開始滑動

end_x,   end_y : 表示滑動后的坐標,也就是滑動到哪里

duration:     : 表示滑動過程的時間間隔,模擬操作時,我們最好設置個時間間隔,避免由于代碼運行太快,而真機或者模擬器反應比較慢,而操作失敗,單位以毫秒計算

通過源碼,我們發現swipe方法實際上是使用TouchAction實現的,這個類在后面我們仍然會使用,主要是模擬一些觸屏動作

實現思路

大家可以想象一下,平時我們滑動屏幕時,是如何操作的?例如向左滑動屏幕,我們往往是把手放在屏幕的右側,然后按住屏幕向左滑動,那么代碼如何知道我們從屏幕的哪個位置開始訥?那就是坐標了,我們可以先獲取屏幕的寬,高,然后按照它的比例計算鼠標的位置坐標,我這里取的起始坐標點為屏幕寬度的0.9倍,高度的0.5倍,大概就是我們實際中滑屏時手指的操作位置。大家可以根據下面播放的動畫觀察鼠標開始的大概位置和結束位置

接下來我們開始模擬動畫中鼠標的操作(人手的操作,我用的模擬器所以有鼠標)

首先我們通過get_window_size()方法獲取屏幕的寬和高(這個方法返回一個字典),然后計算鼠標的初始位置和結束為止

def get_phone_size(self):
  """獲取屏幕的大小"""
  width = self.driver.get_window_size()['width'] # 獲取屏幕的寬
  height = self.driver.get_window_size()['height'] # 獲取屏幕的高
  return width, height

通過模擬動畫不難看出,鼠標大概從起始點坐標(屏幕寬的3/4,高的1/2)位置滑動到結束點坐標(屏幕寬1/4,高1/2),ok,接下來通過swipe()方法實現滑動操作

def swipe_left(self, duration=300):
  """左滑"""
  width, height = self.get_phone_size
     start = width * 0.9, height * 0.5
  end = width * 0.1, height * 0.5
  return self.driver.swipe(*start, *end, duration)
 def swipe_right(self, duration=300):
  """右滑"""
  width, height = self.get_phone_size
  start = width * 0.9, height * 0.5
  end = width * 0.1, height * 0.5 
  return self.driver.swipe(*start, *end, duration) 
 def swipe_up(self, duration): 
  """上滑""" 
  width, height = self.get_phone_size 
  start = width * 0.9, height * 0.5
  end = width * 0.1, height * 0.5
  return self.driver.swipe(*start, *end, duration) 
 def swipe_down(self, duration): 
  """下滑""" 
  width, height = self.get_phone_size 
  start = width * 0.9, height * 0.5
  end = width * 0.1, height * 0.5
  return self.driver.swipe(*start, *end, duration)

方法優化

以上每一個方法調用一次只能滑動一次,而且不同的滑動方向需要調用不同的方法,使用時比較麻煩。所以我們可以優化一下代碼,通過調用一個函數實現不同次數,不同方向的滑動

使用for循環實現連續的滑動,引入direction參數,結合字典及反射機制,實現根據不同的參數執行不同滑動方向的方法,傳遞num參數控制滑動的次數,具體代碼如下

def skip_welcome_page(self, direction, num=3):
  """
  滑動頁面跳過引導動畫
  :param direction: str 滑動方向,left, right, up, down
  :param num: 滑動次數
  :return:
  """
  direction_dic = {
   "left": "swipe_left",
   "right": "swipe_right",
   "up": "swipe_up",
   "down": "swipe_down"
  }
  time.sleep(3)
  if hasattr(self, direction_dic[direction]):
   for _ in range(num):
    getattr(self, direction_dic[direction])() # 使用反射執行不同的滑動方法
  else:
   raise ValueError("參數{}不存在, direction可以為{}任意一個字符串".
        format(direction, direction_dic.keys()))

以上就是所有滑動屏幕的操作了,具體效果,我們后面再看(你也可以先試試)

手勢密碼

TouchAction類

模擬手勢密碼的繪制我們使用TouchAction類,這個類提供了短按壓press()方法,wait()方法,move_to()方法,release()方法,perform()方法等常用方法,下面我簡單說明一下這幾個方法的作用

press(element, x, y)  : 其中element參數是一個元素對象,當element不為空時,x和y必須位None,如果element為None時,x如果不為None,那么y也不能位None,也就是說在安卓操作系統中,element和(x,y)必要傳遞一個,蘋果系統可以不傳,這里不做介紹

wait(duration) : duration是時間,以毫秒為單位,這個方法的作用是等待一段時間,和sleep的作用類似,唯一區別sleep不能被TouchAtion對象訪問

release() : 這個方法的作用是結合press等按壓動作使用的,表示抬起動作

perform():這個方法的作用是使所有的按壓及等待,release等動作生效

實現思路

模擬大多app中的手勢設置密碼操作會遇見兩種情況,一種是9宮格中每一個點的元素都可以通過定位表達式定位到,另一種是每個點無法通過定位表達式定位到的,只能定位到整體9宮格元素,每個點只能通過獲取坐標的方式定位,那么我們今天模擬繪制手勢密碼的情況就是第二種,如果這種掌握了,那么第一種更簡單,下面我們分析一下該如何獲取每一個點的坐標,先來看下面的圖

上圖中的x軸,y軸是手機的坐標表示方式,請區別數學中的二維坐標,其中x軸方向表示手機屏幕的寬度width,y軸方向表示屏幕的高度height,原點為(0, 0); 藍色方框代表9宮格手勢操作的整體元素(內部包含9個點),start_x, start_y 代表9宮格元素的起始坐標點,start_x也是9宮格起始點距離y軸的距離,start_y也是9宮格起始點距離x軸的距離,請大家一定理解這幾個值的關系,下面我們可以通過WebElement對象的rect方法獲取9宮格元素的寬,高及起始點坐標

def get_element_size_location(element):
  width = element.rect["width"] # 9宮格元素的寬度
  height = element.rect["height"] # 9宮格坐標的高度
  # 9宮格元素的起始坐標點
  start_x = element.rect["x"] 
  start_y = element.rect["y"]
  return width, height, start_x, start_y

除了使用rect方法外,你還可以使用location和size方法分別獲取元素的起始點坐標和寬,高,兩個方法同樣返回字典

element.location ->{"x": start_x, "y": start_y}
element.size ->{"width": width, "height": height}

接下來我們通過9宮格元素的width,height,start_x, start_y分別計算每個點的坐標, 我們按照上圖,把9宮格元素的width和height分別等分為6等分

前3個點(1, 2, 3)的坐標分別是

width, height, start_x, start_y = self.get_element_size_location(element)
point_1 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 1)}
point_2 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 1)}
point_3 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 1)}

中間3個點(4, 5, 6)的坐標分別為

point_4 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 3)}
point_5 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 3)}
point_6 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 3)}

最后3個點(7, 8, 9)的坐標分別為

point_7 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 5)}
point_8 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 5)}
point_9 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 5)}

下面我們使用TouchAction類中的move_to,wait,release,perform方法實現從一個點移動到另一個點,進而實現模擬手勢密碼的連線操作(鏈接1-2-3-6-9)

TouchAction(driver).press(x=point_1["x"], y=point_1["y"]).wait(300)\

 .move_to(x=point_2["x"], y=point_2["y"]).wait(500)\

 .move_to(x=point_3["x"], y=point_3["y"]).wait(500)\

 .move_to(x=point_6["x"], y=point_6["y"]).wait(500)\

 .move_to(x=point_9["x"], y=point_9["y"]).wait(500).release().perform()

完整代碼

不包含滑動屏幕的代碼

base.py

"""
------------------------------------
@Time : 2019/8/6 20:22
@Auth : linux超
@File : base.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
from appium.webdriver import WebElement
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.webdriver import WebDriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException, TimeoutException
class Base(object):
 def __init__(self, driver: WebDriver):
  self.driver = driver
 @staticmethod
 def get_element_size_location(element):
  width = element.rect["width"]
  height = element.rect["height"]
  start_x = element.rect["x"]
  start_y = element.rect["y"]
  return width, height, start_x, start_y
 def gesture_password(self, element: WebElement):
  width, height, start_x, start_y = self.get_element_size_location(element)
  point_1 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 1)}
  point_2 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 1)}
  point_3 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 1)}
  point_4 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 3)}
  point_5 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 3)}
  point_6 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 3)}
  point_7 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 5)}
  point_8 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 5)}
  point_9 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 5)}
  TouchAction(self.driver).press(x=point_1["x"], y=point_1["y"]).wait(300) \

   .move_to(x=point_2["x"], y=point_2["y"]).wait(500) \

   .move_to(x=point_3["x"], y=point_3["y"]).wait(500) \

   .move_to(x=point_6["x"], y=point_6["y"]).wait(500) \

   .move_to(x=point_9["x"], y=point_9["y"]).wait(500).release().perform()
 def find_element(self, locator: tuple, timeout=30) -> WebElement:
  wait = WebDriverWait(self.driver, timeout)
  try:
   element = wait.until(lambda driver: driver.find_element(*locator))
   return element
  except (NoSuchElementException, TimeoutException):
   print('no found element {} by {}', format(locator[1], locator[0]))
if __name__ == '__main__':
 pass


測試代碼

test_gesture_password.py

import time
import unittest
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from base import Base
class TestGesture(unittest.TestCase):
 def setUp(self):
  desired = {
   "automationName": "uiautomator1",
   "platformName": "Android",
   "platformVersion": '5.1.1',
   "deviceName": "127.0.0.1:62001",
   "appPackage": "com.xxzb.fenwoo",
   "appActivity": "com.xxzb.fenwoo.activity.addition.WelcomeActivity",
   "app": r"D:\AppAutoTest\appPackage\Future-release-2018.apk",
   "unicodeKeyboard": True, # 屏蔽鍵盤
   "resetKeyboard": True
  }
  self.driver = webdriver.Remote(command_executor="http://127.0.0.1:4723/wd/hub",
          desired_capabilities=desired)
  self.base = Base(self.driver)
 def test_gesture_password(self):
  # 直接切換到手勢密碼頁面
  self.driver.start_activity(app_package="com.xxzb.fenwoo",
         app_activity=".activity.user.CreateGesturePwdActivity")
  commit_btn = (MobileBy.ID, 'com.xxzb.fenwoo:id/right_btn')
  password_gesture = (MobileBy.ID, 'com.xxzb.fenwoo:id/gesturepwd_create_lockview')
  element_commit = self.base.find_element(commit_btn)
  element_commit.click()
  # 9宮格元素
  password_element = self.base.find_element(password_gesture)
  self.base.gesture_password(password_element)
  time.sleep(5) # 為了看效果
 def tearDown(self):
  self.driver.quit()
if __name__ == '__main__':
 unittest.main()


以上就是完整的模擬手勢密碼操作的代碼, 但是問題來了 , 我這里執行的時候不成功,很尷尬,但是我確實看到過別人通過這種獲取每個點的坐標,從一個點的坐標移動到另一個點的坐標的方式成功畫線了,當然你可以先試試能不能成功再往下看!

方法重寫

如果上邊的方式你也不成功,那么就試試下面的方法吧,原理是一樣的,主要不同點在,move_to方法傳遞的不是每個點的坐標,而是相對點的坐標,也就是從一個點移動到另一個點的距離坐標,例如點1的坐標為(360, 579), 點2的坐標為(580, 579), 那么移動的距離應該是橫向220,縱向為0, 傳遞的參數應該是這樣的move_to(x=220, y=0)(這里傳遞的參數叫做相對位置坐標,但是move_to的源碼就是按照我之前的寫法傳參的,具體為啥,我也不得而知了),修改部分代碼如下

TouchAction(self.driver).press(x=point_1["x"], y=point_1["y"]).wait(300) \

 .move_to(x=point_2["x"]-point_1["x"], y=point_2["y"]-point_1["y"]).wait(500) \

 .move_to(x=point_3["x"]-point_2["x"], y=point_3["y"]-point_2["y"]).wait(500) \

 .move_to(x=point_6["x"]-point_3["x"], y=point_6["y"]-point_3["y"]).wait(500) \

 .move_to(x=point_9["x"]-point_6["x"], y=point_9["y"]-point_6["y"]).wait(500).release().perform()

相對坐標的計算方法:用后一個目標點坐標減去前一個點的坐標即為相對坐標,你可以把這個段代碼替換一下,你會發現確實成功了

代碼優化

上述代碼你會發現, 每次繪制的只能是同一個密碼,如果我想繪制不同的密碼,那么就必須修改繪制時傳遞的坐標,作為一枚優秀的程序員怎么可以這樣訥?沖這句話,我就必須得想辦法做到繪制任何密碼組合的情況。我的需求是,當我給繪制函數getsture_password()傳遞不同密碼時(例如這樣的方式getsture_password(1, 2, 3, 6, 9))那么程序應該幫我把1-2-3-6-9鏈接起來,所以我想到了使用字典,把每個數字分別對應每一個坐標點,像下面這樣

def get_password_location(self, element: WebElement) -> dict:
 width, height, start_x, start_y = self.get_element_size_location(element)
 point_1 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 1)}
 point_2 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 1)}
 point_3 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 1)}
 point_4 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 3)}
 point_5 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 3)}
 point_6 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 3)}
 point_7 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 5)}
 point_8 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 5)}
 point_9 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 5)}
 keys = {
  1: point_1,
  2: point_2,
  3: point_3,
  4: point_4,
  5: point_5,
  6: point_6,
  7: point_7,
  8: point_8,
  9: point_9
 }
 return keys

然后我通過另一個方法來實現繪制連線的功能

def gesture_password(self, element: WebElement, *pwd): # pwd是個元組,pwd[0]表示第一個密碼
 """手勢密碼: 直接輸入需要鏈接的點對應的數字,最多9位
 pwd: 傳你想連接的點構成的密碼,如:1, 2, 3, 6, 9
 """
 if len(pwd) > 9:
  raise ValueError("需要設置的密碼不能超過9位!")
 keys_dict = self.get_password_location(element) # 9個點的坐標組成的字典
 start_point = "TouchAction(self.driver).press(x={0}, y={1}).wait(200)".\ # keys_dict[pwd[0]] 得到第一位密碼數字對應的坐標的字典
  format(keys_dict[pwd[0]]["x"], keys_dict[pwd[0]]["y"]) # 起始點的坐標
 for index in range(len(pwd)-1): # 0,1,2,3
  follow_point = ".move_to(x={0}, y={1}).wait(200)".\

   format(keys_dict[pwd[index+1]]["x"] - keys_dict[pwd[index]]["x"],
     keys_dict[pwd[index+1]]["y"] - keys_dict[pwd[index]]["y"]) # 后續的點坐標
  start_point = start_point + follow_point # 把起始點的表達式和后續鏈接的點表達式鏈接在一起組成一個模擬連線的完整過程
 full_point = start_point + ".release().perform()" # 完整的過程通過.release().perform()使其生效
 return eval(full_point) # 執行一串表達式

比較難理解的地方,我已經詳細注釋了,當然,你可以復制我的代碼先驗證能否繪制成功再分析代碼的實現原理

所有代碼

修改后的繪制手勢密碼代碼滑屏代碼

"""
------------------------------------
@Time : 2019/8/6 20:45
@Auth : linux超
@File : base.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ  : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
import time
from appium.webdriver import WebElement
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.webdriver import WebDriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException, TimeoutException
class Base(object):
  def __init__(self, driver: WebDriver):
    self.driver = driver
  @property
  def get_phone_size(self):
    """獲取屏幕的大小"""
    width = self.driver.get_window_size()['width']
    height = self.driver.get_window_size()['height']
    return width, height
  def swipe_left(self, duration=300):
    """左滑"""
    width, height = self.get_phone_size
    start = width * 0.9, height * 0.5
    end = width * 0.1, height * 0.5
    return self.driver.swipe(*start, *end, duration)
  def swipe_right(self, duration=300):
    """右滑"""
    width, height = self.get_phone_size
    start = width * 0.1, height * 0.5
    end = width * 0.9, height * 0.5
    return self.driver.swipe(*start, *end, duration)
  def swipe_up(self, duration):
    """上滑"""
    width, height = self.get_phone_size
    start = width * 0.5, height * 0.9
    end = width * 0.5, height * 0.1
    return self.driver.swipe(*start, *end, duration)
  def swipe_down(self, duration):
    """下滑"""
    width, height = self.get_phone_size
    start = width * 0.5, height * 0.1
    end = width * 0.5, height * 0.9
    return self.driver.swipe(*start, *end, duration)
  def skip_welcome_page(self, direction, num=3):
    """
    滑動頁面跳過引導動畫
    :param direction: str 滑動方向,left, right, up, down
    :param num: 滑動次數
    :return:
    """
    direction_dic = {
      "left": "swipe_left",
      "right": "swipe_right",
      "up": "swipe_up",
      "down": "swipe_down"
    }
    time.sleep(3)
    if hasattr(self, direction_dic[direction]):
      for _ in range(num):
        getattr(self, direction_dic[direction])() # 使用反射執行不同的滑動方法
    else:
      raise ValueError("參數{}不存在, direction可以為{}任意一個字符串".
               format(direction, direction_dic.keys()))
  @staticmethod
  def get_element_size_location(element):
    width = element.rect["width"]
    height = element.rect["height"]
    start_x = element.rect["x"]
    start_y = element.rect["y"]
    return width, height, start_x, start_y
  def get_password_location(self, element: WebElement) -> dict:
    width, height, start_x, start_y = self.get_element_size_location(element)
    point_1 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 1)}
    point_2 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 1)}
    point_3 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 1)}
    point_4 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 3)}
    point_5 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 3)}
    point_6 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 3)}
    point_7 = {"x": int(start_x + width * (1 / 6) * 1), "y": int(start_y + height * (1 / 6) * 5)}
    point_8 = {"x": int(start_x + width * (1 / 6) * 3), "y": int(start_y + height * (1 / 6) * 5)}
    point_9 = {"x": int(start_x + width * (1 / 6) * 5), "y": int(start_y + height * (1 / 6) * 5)}
    keys = {
      1: point_1,
      2: point_2,
      3: point_3,
      4: point_4,
      5: point_5,
      6: point_6,
      7: point_7,
      8: point_8,
      9: point_9
    }
    return keys
  def gesture_password(self, element: WebElement, *pwd):
    """手勢密碼: 直接輸入需要鏈接的點對應的數字,最多9位
    pwd: 1, 2, 3, 6, 9
    """
    if len(pwd) > 9:
      raise ValueError("需要設置的密碼不能超過9位!")
    keys_dict = self.get_password_location(element)
    start_point = "TouchAction(self.driver).press(x={0}, y={1}).wait(200)". \

      format(keys_dict[pwd[0]]["x"], keys_dict[pwd[0]]["y"])
    for index in range(len(pwd) - 1): # 0,1,2,3
      follow_point = ".move_to(x={0}, y={1}).wait(200)". \

        format(keys_dict[pwd[index + 1]]["x"] - keys_dict[pwd[index]]["x"],
            keys_dict[pwd[index + 1]]["y"] - keys_dict[pwd[index]]["y"])
      start_point = start_point + follow_point
    full_point = start_point + ".release().perform()"
    return eval(full_point)
  def find_element(self, locator: tuple, timeout=30) -> WebElement:
    wait = WebDriverWait(self.driver, timeout)
    try:
      element = wait.until(lambda driver: driver.find_element(*locator))
      return element
    except (NoSuchElementException, TimeoutException):
      print('no found element {} by {}', format(locator[1], locator[0]))
if __name__ == '__main__':
  pass

"""
------------------------------------
@Time : 2019/8/6 20:47
@Auth : linux超
@File : test.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ  : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
import time
import unittest
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from base import Base
class TestGesture(unittest.TestCase):
  def setUp(self):
    desired = {
      "automationName": "uiautomator1",
      "platformName": "Android",
      "platformVersion": '5.1.1',
      "deviceName": "127.0.0.1:62001",
      "appPackage": "com.xxzb.fenwoo",
      "appActivity": "com.xxzb.fenwoo.activity.addition.WelcomeActivity",
      "app": r"D:\AppAutoTest\appPackage\Future-release-2018.apk",
      "unicodeKeyboard": True, # 屏蔽鍵盤
      "resetKeyboard": True
    }
    self.driver = webdriver.Remote(command_executor="http://127.0.0.1:4723/wd/hub",
                    desired_capabilities=desired)
    self.base = Base(self.driver)
  def test_gesture_password(self):
    self.base.skip_welcome_page('left', 3) # 滑動屏幕
    time.sleep(3) # 為了看滑屏的效果
    self.driver.start_activity(app_package="com.xxzb.fenwoo",
                  app_activity=".activity.user.CreateGesturePwdActivity")
    commit_btn = (MobileBy.ID, 'com.xxzb.fenwoo:id/right_btn')
    password_gesture = (MobileBy.ID, 'com.xxzb.fenwoo:id/gesturepwd_create_lockview')
    element_commit = self.base.find_element(commit_btn)
    element_commit.click()
    password_element = self.base.find_element(password_gesture)
    self.base.gesture_password(password_element, 1, 2, 3, 6, 5, 4, 7, 8, 9)
    time.sleep(5) # 看效果
  def tearDown(self):
    self.driver.quit()
if __name__ == '__main__':
  unittest.main()

測試效果

包含滑動屏幕

總結

最后,我們再總結一下完成所有的操作需要掌握的知識點

1.滑動屏幕時起始位置和結束位置應該從哪里開始與結束,如何獲取

2.滑動屏幕使用的swipe()方法如何使用

3.實現多次滑動方法的實現原理,這里用到了反射,其實使用if也可以實現一樣的效果,但是總感覺if有點low

4.9宮格起始位置與手機屏幕的關系及每個點的坐標如何計算

5.TouchAction類中的常用方法如何使用

6.理解繪制手勢密碼方法的封裝原理及思路

以上所述是小編給大家介紹的使用swipe方法模擬屏幕滑動與手勢密碼繪制,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

您可能感興趣的文章:
  • vue-awesome-swiper 基于vue實現h5滑動翻頁效果【推薦】
  • 解決Vue中引入swiper,在數據渲染的時候,發生不滑動的問題
  • Swiper 4.x 使用方法(移動端網站的內容觸摸滑動)
  • swiper 解決動態加載數據滑動失效的問題
  • 移動端觸摸滑動插件swiper使用方法詳解
  • AngularJS 中使用Swiper制作滾動圖不能滑動的解決方法
  • 移動端滑動插件Swipe教程
  • 詳解SwipeListView框架實現微信\QQ滑動刪除效果
  • Android 簡易手勢密碼開源庫詳解
  • Android自定義控件實現手勢密碼

標簽:七臺河 咸寧 汕尾 三沙 許昌 棗莊 忻州 萊蕪

巨人網絡通訊聲明:本文標題《使用swipe方法模擬屏幕滑動與手勢密碼繪制》,本文關鍵詞  使用,swipe,方法,模擬,屏幕,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用swipe方法模擬屏幕滑動與手勢密碼繪制》相關的同類信息!
  • 本頁收集關于使用swipe方法模擬屏幕滑動與手勢密碼繪制的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 上海胜松机械制造有限公司| 陆丰机械郑州有限公司| 南京惠德机械有限公司| 玉溪新兴钢铁有限公司| 泰兴机械制造有限公司| 东台富康机械有限公司| 新乡矿山起重机有限公司| 保定锐腾机械制造有限公司| 本源兴(上海)包装机械材料有限公司| 上海 马机械有限公司| 厦门珀挺机械有限公司| 青岛迪恩机械制造有限公司| 温州科迪机械有限公司| 曲阜兴运输送机械设备有限公司| 上海善佳机械设备有限公司 | 广州磊蒙机械设备有限公司| 养殖有限公司起名大全| 溧阳申特钢铁有限公司| 上海万铂起重机械有限公司| 苏州恒升机械有限公司| 宜都大一重工有限公司| 宁波海伯精密机械制造有限公司| 杭州康发塑料机械有限公司| 潍坊市贝特机械有限公司| 石家庄美迪机械有限公司| 新乡高服筛分机械有限公司| 浙江佳成机械有限公司| 常州先电机械有限公司| 东莞市乔锋机械有限公司| 无锡光良塑料机械有限公司| 四川久进机械制造有限公司| 上海美捷伦包装机械有限公司 | 唐山龙润机械有限公司| 威海柳道机械有限公司| 河南星光机械有限公司| 南海区机械设备有限公司| 江苏贝尔机械有限公司| 郑州双狮粮油机械有限公司| 厦门市机械有限公司| 三菱重工空调有限公司| 宁波恒阳机械有限公司| 安宁永昌钢铁有限公司| 河南华北起重吊钩有限公司| 济南大彤机械设备有限公司| 安徽鸿泰钢铁有限公司| 湖北 机械 有限公司| 无锡华迪机械设备有限公司| 机电设备有限公司起名| 苏州德伊捷自动化机械有限公司 | 宁波威恩精密机械有限公司| 高义钢铁有限公司电话| 莱州华汽机械有限公司| 东莞市天周机械有限公司| 金田豪迈木业机械有限公司| 青岛金越隆机械有限公司| 北京余特包装机械有限公司| 昆山市贝纳特机械设备有限公司 | 山东中探机械有限公司| 青岛圣诺机械有限公司| 山西海威钢铁有限公司| 济南捷迈数控机械有限公司| 江苏凯凯机械有限公司| 太仓悦凯精密机械有限公司| 德耐尔压缩机械有限公司| 广州通泽机械有限公司| 安徽佶龙机械有限公司| 上海起重运输机械厂有限公司| 湘东化工机械有限公司| 贵州华泰机械设备租赁有限公司| 天津钢铁贸易有限公司| 机械自动化有限公司| 广州凯诺机械有限公司| 广州领新机械实业有限公司| 镇江斯伊格机械有限公司| 绍兴金昊机械制造有限公司 | 天阳机械制造有限公司| 明天机械有限公司待遇| 浙江赛峰机械有限公司| 广州汉牛机械设备有限公司| 合肥方圆机械有限公司| 绍兴金昊机械制造有限公司| 广州汉牛机械设备有限公司| 东莞钰腾机械有限公司| 章丘市宇龙机械有限公司| 冷水江钢铁有限公司| 上海昱庄机械有限公司| 江苏双箭输送机械有限公司| 洛阳瑞德机械有限公司| 苏州日拓机械有限公司| 河北德龙钢铁有限公司| 浙江兴盛机械有限公司| 东莞市雅康精密机械有限公司| 恩格尔机械上海有限公司| 无锡大力起重机械有限公司| 徐州荣阳钢铁有限公司| 陕西至信机械制造有限公司怎么样| 金华市 机械制造有限公司| 景德镇 机械有限公司| 临沂胜代机械有限公司| 山东科恳机械制造有限公司| 西安飞鸿机械有限公司| 明辉机械设备制造有限公司| 上海玖钲机械设备有限公司| 光华机械制造有限公司| 河南点赞钢铁有限公司| 松源机械制造有限公司| 东莞发机械有限公司| 辽宁中冶石化机械有限公司| 上海航空机械有限公司| 东莞市自动化机械有限公司| 山东海宏重工有限公司| 河北航天振邦精密机械有限公司| 新乡市中轻机械有限公司| 郑州沃尔德机械制造有限公司| 天津中核机械有限公司| 智能机械设备有限公司| 迅得机械东莞有限公司| 天津精密机械有限公司| 日晗精密机械有限公司| 临沂金立机械有限公司| 广东乐善机械有限公司| 西安北村精密机械有限公司| 江苏仁达机械有限公司怎么样| 阿尔法起重机有限公司| 苏州艾卓精密机械有限公司| 重庆力劲机械有限公司| 深圳市塑胶机械有限公司| 中山市信元铝门窗机械制造有限公司| 杭州萧山鼎立机械有限公司| 济南焊达机械有限公司| 柳州市超凌顺机械制造有限公司| 台州迈兴机械有限公司| 烟台 机械设备有限公司| 广州市日富包装机械有限公司| 江苏梅花机械有限公司| 上海帆铭机械有限公司| 粤裕丰钢铁有限公司| 东莞市凯奥机械有限公司| 安徽同铸工程机械有限公司| 山东万力起重机械有限公司| 阜阳 机械 有限公司| 山西太行钢铁有限公司| 南海区机械设备有限公司| 唐山神州机械有限公司| 江苏化工机械有限公司| 烟台莫深机械设备有限公司| 苏州拓博机械设备有限公司| 桂林科丰机械有限公司| 利德盛机械有限公司| 标特福精密机械电子有限公司| 盾建重工制造有限公司| 靖江 机械有限公司| 四平方向机械有限公司| 哈尔滨恒力达机械有限公司| 惠州德钢机械有限公司| 重庆茂田机械有限公司| 上海香宝机械设备有限公司| 佳木斯佳联收获机械有限公司| 福建新源重工有限公司| 滕州三合机械有限公司| 绍兴 机械有限公司| 秦皇岛国阳钢铁有限公司| 宏强机械设备有限公司| 威海华丰机械有限公司| 上海科斯包装机械有限公司| 德州佳永机械制造有限公司| 上海环球机械有限公司| 泉州市力达机械有限公司| 瑞安市华东包装机械有限公司| 上海金恒机械制造有限公司| 上海光塑机械制造有限公司| 张家港亿塑机械有限公司| 重庆川凯机械有限公司| 安阳锻压机械工业有限公司| 立信染整机械深圳有限公司| 南通密炼捏合机械有限公司| 浙江流遍机械润滑有限公司| 大庆惠博普石油机械设备制造有限公司| 艾瑞精密机械有限公司| 浙江园林机械有限公司| 山东旭升机械有限公司| 昆成机械机械有限公司| 浙江人和机械有限公司| 安徽中晨机械有限公司| 佛山市 重工有限公司| 青岛青锻锻压机械有限公司| 河北食品机械有限公司| 上海合升机械有限公司| 浙江晟达机械有限公司| 山东威力重工机床有限公司 | 上海起华机械有限公司| 景德镇 机械有限公司| 上海瑞派机械有限公司招聘| 上海捷如重工机电设备有限公司| 河南广泰机械有限公司| 宏祥建筑机械有限公司| 淄博推进化工机械有限公司| 南通宝钢钢铁有限公司| 河南起重机有限公司| 上海国翔包装机械制造有限公司 | 浙江吉隆机械有限公司| 盐城丰炜机械制造有限公司| 浙江华天机械有限公司| 廊坊畅享机械有限公司| 慈溪科傲机械有限公司| 桂林机械制造有限公司| 温州立胜印刷包装机械有限公司| 邯郸市复液液压机械有限公司| 美心翼申机械有限公司| 湖南正中制药机械有限公司| 天阳机械制造有限公司| 无锡美高帝机械有限公司| 上海赛峰包装机械设备有限公司 | 三菱重工空调有限公司| 广州嘉银机械有限公司| 青岛隆硕农牧机械制造有限公司| 起步有限公司上市排名| 深圳市机械设备有限公司| 首钢凯西钢铁有限公司| 广东佛山机械有限公司| 湖州卓信机械有限公司| 枣庄金正钢铁有限公司| 上海国翔包装机械制造有限公司 | 新科起重机有限公司| 安徽国梁机械设备有限公司 | 河南安普包装机械制造有限公司 | 上海乾享机械设备有限公司| 河南佳德机械有限公司| 昆山五金机械有限公司| 上海精机械设备有限公司| 上海舜锋机械制造有限公司| 莱州 机械有限公司| 德瑞机械设备有限公司| 山东曲阜机械有限公司| 济南建筑机械有限公司| 东莞市鸿铭机械有限公司| 杭州诺迈机械有限公司| 济南冠越机械设备有限公司 | 河南起重设备有限公司| 芜湖 机械制造有限公司| 上海胜松机械制造有限公司 | 扬州文轩钢铁有限公司| 广东恒联食品机械有限公司售后 | 上海山冠机械有限公司| 牛力机械制造有限公司| 济南鑫金龙机械有限公司| 广州凯诺机械有限公司| 台州亚格机械有限公司| 化工有限公司起名大全| 青岛鲁奥机械有限公司| 上海轻工机械有限公司| 合肥食品机械有限公司| 济南新思路机械设备有限公司| 河南飞龙工程机械制造有限公司 | 广西机械制造有限公司| 苏州动力机械有限公司| 宏鑫机械设备有限公司| 皋兰兰鑫钢铁有限公司| 南通航力重工机械有限公司 | 无锡鹰贝机械有限公司| 长沙中传机械有限公司| 首钢伊犁钢铁有限公司| 上海冠隆阀门机械有限公司| 首钢长治钢铁有限公司地址| 上海派协包装机械有限公司 | 旭众食品机械有限公司| 青岛晟森机械有限公司| 众力达机械有限公司| 旭田包装机械有限公司| 广东食品机械有限公司| 江 诚机械有限公司| 温州华印机械有限公司| 青州三和机械有限公司| 浙江德玛克机械有限公司| 苏州百勤精密机械有限公司| 无锡开普机械有限公司| 杭州誉球机械有限公司| 邢台机械轧辊有限公司| 广州而众机械有限公司| 北京机械设备租赁有限公司| 安阳嘉和机械有限公司| 福建精密机械有限公司| 广州新浪爱拓化工机械有限公司 | 黄石华旦机械制造有限公司| 济南天助升降机械有限公司| 无锡通用起重运输机械有限公司| 苏州宁兴精密机械有限公司 | 丰诺植保机械制造有限公司| 无锡传动机械有限公司| 江苏汤姆包装机械有限公司| 涂装机械设备有限公司| 广东星联精密机械有限公司| 常熟飞龙机械有限公司| 重型机械制造有限公司| 重庆德运机械制造有限公司| 广东力丰机械有限公司| 上海紫明印刷机械有限公司| 佛山市顺德区金工铝门窗机械实业有限公司 | 四川久进机械制造有限公司| 溧阳科华机械制造有限公司| 海之力机械有限公司| 武汉日晗精密机械有限公司| 南阳东佳机械有限公司| 昆山裕邦机械有限公司| 浙江华塑机械有限公司| 上海曼中机械有限公司| 济南四通机械有限公司| 山东 包装机械有限公司| 河南良益机械有限公司| 常熟 机械 有限公司| 泰安嘉和重工机械有限公司| 杭州金丰机械有限公司| 苏州升降机械有限公司| 安徽 机械设备有限公司| 南京一嘉起重机械制造有限公司 | 鑫宏机械制造有限公司| 河南旭矿机械有限公司| 迈安德食品机械有限公司| 上海工程机械厂有限公司| 江苏同正机械制造有限公司| 三一众力机械有限公司| 蚌埠液力机械有限公司| 西安中大机械有限公司| 上海石化机械制造有限公司 | 洛阳机械制造有限公司| 张家口机械有限公司| 诸城顺德机械有限公司| 宁波丰州机械有限公司| 广东宏兴机械有限公司| 三明机械制造有限公司| 纸箱机械制造有限公司| 南通精密机械有限公司| 江苏韩通船舶重工有限公司| 宁波力盟机械有限公司| 郑州同鼎机械设备有限公司| 嵊州市龙威机械制造有限公司| 深圳机械设备有限公司| 北京石油机械有限公司| 青岛日佳机械有限公司| 唐山东方钢铁有限公司| 重村钢模机械工业苏州有限公司| 广州工程机械有限公司| 长葛市机械有限公司| 济南泽机械有限公司| 昆山精工机械有限公司| 浙江网路崛起有限公司| 上海浩勇精密机械有限公司| 镇江机械设备有限公司| 太平洋机械有限公司| 邢台市振成机械有限公司| 小松山东工程机械有限公司| 洛阳工程机械有限公司| 东阳机械制造有限公司| 重庆瀚源机械有限公司| 上海三景机械有限公司| 苏州市机械制造有限公司| 天盛机械制造有限公司| 天津市华天世纪机械有限公司| 禹城益佳机械有限公司| 昆山裕邦机械有限公司| 广东力特工程机械有限公司| 青岛威尔塑料机械有限公司| 金华巨鑫机械有限公司| 齐齐哈尔机械有限公司| 昆山之富士机械制造有限公司| 昆山富邦机械有限公司| 食品机械(上海)有限公司| 芜湖机械制造有限公司| 上海久浩机械有限公司| 齐齐哈尔机械有限公司| 河北荣信钢铁有限公司| 天津 津工机械有限公司| 上海科熙起重设备有限公司 | 如皋市通达机械制造有限公司| 浙江 机械 有限公司| 中船重工环境工程有限公司怎么样 | 江阴市新友机械制造有限公司 | 桐乡 机械有限公司| 青岛北船重工有限公司| 保定华光机械有限公司| 东莞 机械有限公司| 柳州市宏华机械有限公司| 广东富华重工制造有限公司| 济南四通机械有限公司| 苏州施米特机械有限公司| 顺德富华工程机械制造有限公司| 徐州二川机械有限公司| 无锡市钢铁有限公司| 天津江天重工有限公司| 山东恒旺机械有限公司| 江苏 机械有限公司| 无锡佳特机械有限公司| 邢台市振成机械有限公司| 盐城万富隆机械制造有限公司| 上海唐迪机械制造有限公司| 福建兴翼机械有限公司| 山东威海机械有限公司| 辽宁天一重工有限公司| 苏州精雕精密机械工程有限公司| 邯郸包装机械有限公司| 恒江机械制造有限公司| 洛阳瑞德机械有限公司| 洛阳机械设备有限公司| 卫华起重机有限公司| 深圳市德润机械有限公司| 福建鼎盛钢铁有限公司| 河北小犟牛工程机械有限公司| 福州 机械 有限公司| 杭州大禹机械有限公司| 潍坊广德机械有限公司| 佛山精诚机械有限公司| 江阴兴澄特种钢铁有限公司地址| 桐乡 机械有限公司| 北方机械制造有限公司| 湖州天和机械有限公司| 江阴中立机械工业有限公司| 固安嘉峰机械有限公司| 装饰工程有限公司起名| 金华机械 有限公司| 河南人从众机械制造有限公司| 杭州岛文机械有限公司| 郑州祥龙建筑机械租赁有限公司| 快克数控机械有限公司| 马鞍山市机械有限公司| 山东机械铸造有限公司| 邯郸包装机械有限公司| 江苏东邦机械有限公司| 宁波信泰机械有限公司| 浙江开诚机械有限公司| 广东华三行工程机械有限公司| 山西 重工有限公司| 烟台美丰机械有限公司| 广东万联包装机械有限公司| 浙江麒龙起重机械有限公司| 机械制造有限公司 官网| 上海隆麦机械有限公司| 洛阳洛北重工机械有限公司| 青岛仕诚塑料机械有限公司| 温州镇田机械有限公司| 纽科伦起重机有限公司| 山西中宇钢铁有限公司| 浙江中意机械有限公司| 广州佳速精密机械有限公司| 江阴派格机械设备有限公司| 林氏玻璃机械有限公司| 无锡耀杰机械有限公司| 洛阳奥图机械设备有限公司| 安阳市赛尔德精工机械有限公司| 杭州龙云水利机械制造有限公司| 成都杰瑞达工程机械有限公司| 上海理贝包装机械有限公司| 源通机械设备有限公司| 福建 机械有限公司| 大连机械制造有限公司| 深圳 机械设备有限公司| 浙江远信印染机械有限公司| 东宇机械设备有限公司| 烟台山一机械有限公司| 淮安华辉机械设备有限公司| 江阴韩一钢铁有限公司| 广州新欧机械有限公司| 禹城益佳机械有限公司| 鼎业机械设备有限公司| 天津敏信机械有限公司| 杭州杭重机械有限公司| 深圳市 机械 有限公司| 河北龙汐机械制造有限公司| 河北德欧机械有限公司| 沈阳斗山工程机械有限公司| 湖北江重机械制造有限公司| 张家港市贝尔机械有限公司 | 常州步速者机械制造有限公司| 高峰机械工业有限公司| 斗山工程机械苏州有限公司| 艾莎钢铁天津有限公司| 烟台金元矿业机械有限公司| 广州机械设备制造有限公司| 江阴液压机械有限公司| 东莞市佐臣自动化机械有限公司 | 江门市机械有限公司| 宁波将军机械有限公司| 山东华屹重工有限公司| 有限公司 印刷机械| 宁夏瑞光机械有限公司| 上海申虎包装机械设备有限公司 | 苏州金德纬机械有限公司| 重村钢模机械工业苏州有限公司| 巨荣机械制造有限公司| 苏州市丰科精密机械有限公司| 湖州惠盛机械有限公司| 深圳市安格斯机械有限公司| 金华市 机械制造有限公司| 上海宇减传动机械有限公司| 中山机械设备有限公司| 杭州迪迪机械有限公司| 液压机械制造有限公司| 浙江坤鸿机械设备有限公司 | 镇江鸿泰钢铁有限公司| 长沙远洋机械制造有限公司 | 成都固特机械有限公司| 河北联港废钢铁回收有限公司 | 深圳固尔琦包装机械有限公司| 山东建筑机械有限公司| 农友机械设备有限公司| 成都杰瑞达工程机械有限公司| 湖北鄂重重型机械有限公司 | 南京润森工程机械有限公司| 北京大森长空包装机械有限公司| 东莞市鑫焘机械有限公司| 济南梓鑫机械有限公司| 河北冠能石油机械制造有限公司| 上海山威路桥机械有限公司| 浙江宏涛机械有限公司| 盐城机械设备有限公司| 安阳市赛尔德精工机械有限公司| 浙江君鸿机械有限公司| 厦门 机械设备有限公司| 东莞钰腾机械有限公司| 重庆墨龙机械有限公司| 郑州市联华机械制造有限公司| 广州益川机械有限公司| 沈阳顺达重矿机械制造有限公司 | 成都 机械 有限公司| 东莞市机械制造有限公司| 旺磐精密机械有限公司| 北京雄伟京发机械加工有限公司| 上海毅锴机械有限公司| 山东问云机械有限公司| 台州华达机械有限公司| 浙江冠林机械有限公司| 东莞发机械有限公司| 徐州天立机械有限公司| 河南矿山重型起重机械有限公司 | 深圳市高郭氏精密机械有限公司| 威海 机械有限公司| 杭州红磊机械有限公司| 义乌机械设备有限公司| 沈阳精密机械有限公司| 海安机械制造有限公司| 湖州三一重工有限公司| 安丘瑞源机械制造有限公司| 新源重工机械有限公司| 烟台 机械有限公司| 宁波必沃纺织机械有限公司| 新乡 筛分机械有限公司| 河南天成矿山起重机有限公司| 史陶比尔精密机械电子有限公司| 上海欧特莱阀门机械有限公司| 广州永胜钢铁制品有限公司| 青岛岛宇机械有限公司| 南京星德机械有限公司| 上海鹰宏机械有限公司| 山东大汉建设机械有限公司| 山东银鹰炊事机械有限公司| 合肥中达机械制造有限公司| 宁波天瑞精工机械有限公司| 河南耿力机械有限公司| 山西太行钢铁有限公司| 温州力冠机械有限公司| 北京中车重工机械有限公司| 江阴江达机械装备有限公司| 金达机械制造有限公司| 青州市拓新机械设备有限公司| 成都工程机械有限公司| 台湾高明机械有限公司| 太仓越华精密机械配件有限公司| 江阴市化工机械有限公司 | 徐州东岳工程机械有限公司| 浙江江华机械有限公司| 浙江海重重工有限公司| 上海中机械有限公司| 烟台微特机械有限公司| 昆山市众捷塑料机械有限公司| 广东机械制造有限公司| 诸城市放心食品机械有限公司| 湖南宇泰重工有限公司| 温州华推机械有限公司| 温州迈高机械有限公司| 广东力源液压机械有限公司| 环球工业机械有限公司| 西安星火包装机械有限公司| 山东西王钢铁有限公司| 常州市永明机械制造有限公司| 泰而勒食品机械贸易(上海)有限公司 | 东莞市千岛机械制造有限公司| 山东博宇机械有限公司| 河南起重设备有限公司| 浙江为尚机械有限公司| 中核华兴达丰工程机械有限公司| 温岭市大众精密机械有限公司| 河南森源重工有限公司| 上海洗涤机械有限公司| 动力机械制造有限公司| 新乡市起重机有限公司| 威海 机械有限公司| 上海杰姆博机械设备有限公司 | 沈阳机械设备有限公司| 河南北工机械制造有限公司| 上海敏杰机械有限公司| 济宁五创机械有限公司| 江阴机械制造有限公司怎么样| 浙江康机械有限公司| 泉州佳升机械有限公司| 温州市顺达服装机械有限公司| 上海旭恒精工机械制造有限公司| 诚泰精密机械有限公司| 江苏宏威重工机床制造有限公司| 山东永华机械有限公司| 上海楚尚机械有限公司| 山东金大丰机械有限公司| 柳工常州机械有限公司| 洛阳精密机械有限公司| 河南胜飞石油机械有限公司| 山东神力起重机械有限公司| 江苏宏程重工有限公司| 浙江德鹏机械有限公司| 成都万欣邦达机械制造有限公司 | 宁波兴波机械有限公司| 东莞市宝腾机械有限公司| 福建巨霸机械有限公司| 农业发展有限公司起名| 上海鹰宏机械有限公司| 青岛金福鑫塑料机械有限公司| 山东神州机械有限公司| 大连橡胶塑料机械有限公司| 洛阳塑电机械有限公司| 无锡钢铁贸易有限公司| 上海精密机械有限公司| 泉州泉盛机械有限公司| 上海申克机械有限公司| 无锡东晨机械有限公司| 威海坤豪机械有限公司| 天津动力机械有限公司| 新乡市特昌振动机械有限公司 | 机械有限公司 南丰| 河南耿力机械有限公司| 常州市禾昌机械有限公司| 北京大起空调有限公司| 浙江矿山机械有限公司| 德州锦冠钢铁有限公司| 东莞市英豪机械有限公司 | 上海爱德夏机械有限公司 | 佛山顺德区机械有限公司| 舒勒锻压机械有限公司| 东莞市雅康精密机械有限公司| 深圳市美鹏机械设备有限公司| 郑州华龙机械工程有限公司| 四川机械制造有限公司| 南通图海机械有限公司| 江苏方圣机械有限公司| 兰州炊事机械有限公司| 青州市远航机械设备有限公司| 珠海市机械有限公司| 苏州在田机械有限公司| 沈阳顺达重矿机械制造有限公司| 昆山东新力特精密机械有限公司| 徐州压力机械有限公司| 宁波市海达塑料机械有限公司 | 泉州明辉机械有限公司| 泉州得力农林机械有限公司| 鹤壁万丰矿山机械制造有限公司 | 廊坊 包装机械有限公司| 浙江志高机械有限公司| 厦门东亚机械有限公司| 天津重型机械有限公司| 西安环宇机械制造有限公司| 唐山兴隆钢铁有限公司| 成都蓉诚机械设备有限公司| 潍坊华星机械有限公司| 山西汉通机械有限公司| 宁波威恩精密机械有限公司| 山东运泰机械有限公司| 河南共威机械设备有限公司| 东莞达机械有限公司| 台州欧玮机械有限公司| 西安北村精密机械有限公司| 上海爱德夏机械有限公司| 机械有限公司怎么注册| 力顺源机械有限公司| 山东翔工机械有限公司| 合肥精密机械有限公司| 戴氏印刷机械有限公司| 昆山昆成机械有限公司| 汉中燕航精工机械有限公司| 辽宁天一重工有限公司| 舟山中天重工有限公司| 温州中环机械设备有限公司| 徐州永欣重工有限公司| 威海祥光机械有限公司| 珠海市机械有限公司| 新疆昆仑钢铁有限公司| 唐山泰钢钢铁有限公司| 重庆起重机厂有限公司| 秦皇岛 机械设备有限公司| 广东机械制造有限公司| 河北州科重工有限公司| 杭州宏展机械有限公司| 杭州三共机械有限公司| 河北永洋钢铁有限公司详细地址 | 定州市至信机械制造有限公司| 常州市雪龙机械制造有限公司| 青岛西城铸造机械有限公司 | 青州市远航机械设备有限公司 | 上海金湖机械有限公司| 武汉纵能机械制造有限公司| 昆山苏隆机械制造有限公司| 上海宇减传动机械有限公司| 无锡东源机械制造有限公司| 重庆远博机械有限公司| 三联传动机械有限公司| 青岛 塑料机械有限公司| 湖北江汉重工有限公司| 东莞市永乐机械有限公司| 国机重工洛阳有限公司| 上海凯奇机械设备有限公司| 洛阳工程机械有限公司| 河南朝阳钢铁有限公司| 慈溪机械设备有限公司| 湛江恒润机械有限公司| 江苏优轧机械有限公司| 宜兴富曦机械有限公司| 河南省化工机械制造有限公司| 玉环县机械有限公司| 巩义市人和机械有限公司| 北京起重设备有限公司| 桂林平钢钢铁有限公司| 江阴中南重工有限公司| 济南天宝钢铁有限公司| 杭州中亚机械 有限公司| 滕州市美力机械有限公司| 广州金本机械设备有限公司 | 上海精密机械制造有限公司| 青州市拓新机械设备有限公司 | 天赛塑胶机械有限公司| 亨沃机械设备有限公司| 山东博远重工有限公司| 东莞市英豪机械有限公司| 新乡市新久振动机械有限公司 | 沧州科信环保机械有限公司| 宝钢湛江钢铁有限公司招聘| 天津 机械制造有限公司| 矿山机械制造有限公司| 上海中远海运重工有限公司| 张家口中煤嘉益机械制造有限公司| 汕头市机械有限公司| 昆山美和机械有限公司| 上海剑豪传动机械有限公司| 山东 机械制造有限公司| 山西重工机械有限公司| 福建巨邦机械有限公司| 台湾晁群机械有限公司| 北京大起空调有限公司| 浙江万能弹簧机械有限公司| 青岛凯机械有限公司| 济南格特机械设备有限公司| 徐州徐工基础工程机械有限公司| 太仓鸿安机械有限公司| 上海国翔包装机械制造有限公司| 宁波健信机械有限公司| 上海精密机械制造有限公司 | 青岛华牧机械有限公司| 濮阳机械制造有限公司| 上海埃比西斯机械有限公司 | 兄弟机械西安有限公司| 新乡矿山起重机有限公司| 苏州市丰科精密机械有限公司| 南通海森特重工有限公司| 江阴市豪亚机械制造有限公司| 南通明德重工有限公司| 江苏江成机械有限公司| 重庆墨龙机械有限公司| 宜昌机械设备有限公司| 郑州升升机械有限公司| 烟台金鹏矿业机械有限公司| 山东力强机械有限公司| 江西钧天机械有限公司| 浙江兴发机械有限公司| 东莞数控机械有限公司| 石家庄米兹机械设备有限公司| 漳州南方机械有限公司| 新乡市中天机械有限公司| 东莞信易电热机械有限公司| 德州仁信印染机械有限公司| 广东恒联食品机械有限公司售后| 江南起重机械有限公司| 上海高德机械有限公司| 广东龙辉基业建筑机械有限公司 | 重庆龙建机械有限公司| 兴鑫钢铁有限公司电话| 金源机械制造有限公司| 河南矿山起重机有限公司销售电话 | 台州亚格机械有限公司| 盐城机械设备有限公司| 南通振康机械有限公司| 固安嘉峰机械有限公司| 天津市天机液压机械有限公司| 天津市精密机械有限公司| 恩倍力机械有限公司| 康纳机械制造有限公司| 青岛高通机械有限公司| 无锡市阳通机械设备有限公司 | 山东兴华机械有限公司| 绵阳科睿机械有限公司| 青岛日佳机械有限公司| 保定机械制造有限公司| 陕西鑫辉钢铁有限公司| 唐山燕钢钢铁有限公司| 昆明 机械 有限公司| 杭州华兴机械有限公司| 青岛永正化工机械有限公司| 湖北 钢铁有限公司| 咸阳经纬纺织机械有限公司| 河北途盟机械制造有限公司| 永洋钢铁有限公司电话| 娄底 有限公司 机械| 河北兴华钢铁有限公司| 上海光塑机械制造有限公司| 烟台华隆机械有限公司| 江苏江海机械有限公司| 扬州中孚机械有限公司| 安徽正元机械有限公司| 江苏清淮机械有限公司| 华电重工装备有限公司| 苏州新和机械有限公司| 南通赛孚机械设备有限公司| 上海汉虹精密机械有限公司 | 嘉善精密机械有限公司| 天门纺织机械有限公司| 浙江红旗机械有限公司| 上海涵延机械有限公司| 慈溪市宏晟机械设备有限公司| 粮油机械设备有限公司| 陀曼精密机械有限公司| 合肥逸飞包装机械有限公司| 嵊州市机械有限公司| 林州市振晨重工装备制造有限公司 | 中意合资 威尼托机械有限公司 | 山东鲁工机械有限公司| 山东米科思机械设备有限公司 | 山东威力重工机床有限公司| 马长江钢铁有限公司| 山东欣弘发机械有限公司| 河北小松工程机械贸易有限公司| 广州市力净洗涤机械有限公司 | 临沂盖氏机械有限公司| 河南黎明路桥重工有限公司| 桂林机械制造有限公司| 天津中核机械有限公司| 邢台市振成机械有限公司 | 北仑旭升机械有限公司| 盐城益聚达机械有限公司| 机械化工程有限公司| 江阴中南重工有限公司| 嘉兴扬鑫机械有限公司| 常州市永明机械制造有限公司| 昆山精工机械有限公司| 江阴江达机械装备有限公司| 首都航天机械有限公司| 上海杰伟机械制造有限公司| 浙江先锋机械有限公司| 厦门 机械有限公司| 江阴江达机械装备有限公司| 四川沱江起重机有限公司| 焦作机械制造有限公司| 青州康达机械有限公司| 山东 钢铁有限公司| 玉溪新兴钢铁有限公司| 连云港 机械有限公司| 长沙旭众机械设备有限公司| 广州机械租赁有限公司| 济南龙铸液压机械有限公司| 泰安嘉和重工机械有限公司| 武汉船用机械有限公司| 常州市菲德机械部件有限公司| 嘉兴格鲁博机械有限公司| 常州金源机械设备有限公司| 上海大松机械有限公司| 温州宇英机械有限公司| 上海斯特克沃森重工设备有限公司 | 浙江勇力机械有限公司| 柳州市宏华机械有限公司| 河南省矿山起重机制造有限公司| 深圳塑胶机械有限公司| 河北食品机械有限公司| 江阴起重机械有限公司| 苏州神峰起重机械有限公司| 绵阳动力机械有限公司| 东莞通盛机械有限公司| 许昌 机械有限公司| 上海东蒙路桥机械有限公司| 张家口煤矿机械制造有限公司 | 江阴市三 机械有限公司| 广州新麦机械有限公司| 上海冬松精密机械有限公司| 洛阳福格森机械装备有限公司| 江苏八达重工机械有限公司| 北京起重机械有限公司| 浙江小伦制药机械有限公司| 深圳市创能机械有限公司| 无锡环保机械有限公司| 郑州液压机械有限公司| 天门仙粮机械有限公司| 湛江市机械有限公司| 北京长空机械有限公司| 宁波伟隆传动机械有限公司| 佛山市劲雄机械有限公司 | 南通凯迪自动机械有限公司 | 上海德耐尔压缩机械有限公司| 浙江劲豹机械有限公司| 潍坊华星机械有限公司| 杭州丰波机械有限公司| 沈阳捷优机械设备有限公司 | 山东机械设备有限公司怎么样| 青岛昌佳机械有限公司| 苏州华尔普机械有限公司| 常州武进机械有限公司| 苏州传动机械有限公司| 浙江宇捷机械有限公司| 广东光信机械有限公司| 宁波华表机械制造有限公司| 南通艾迈特机械有限公司| 龙扬机械)有限公司| 顺德机械设备有限公司| 辽宁天亿机械有限公司| 山东环保机械有限公司| 无锡机械制造有限公司| 鞍山重工机械有限公司| 河北东方德源机械制造有限公司| 上海众冠食品机械有限公司| 杭州丽伟电脑机械有限公司| 宝钢湛江钢铁有限公司招聘| 上海合劲传动机械有限公司| 河南铁山起重设备有限公司| 常州腾睿机械有限公司| 佛山海之力机械有限公司| 深圳市鑫台铭机械设备有限公司| 浙江传动机械有限公司| 佛山市浩铭达机械制造有限公司| 广东盈钢机械有限公司| 浙江上易机械有限公司| 浙江伟焕机械制造有限公司| 纽科伦新乡起重机有限公司 | 曲阜兴运输送机械设备有限公司 | 济南金胜星机械设备有限公司| 南京欧能机械有限公司| 张家港斯依格机械设备制造有限公司 | 张家港机械制造有限公司| 英侨机械制造有限公司| 广州市中铭印刷机械有限公司| 和本精密机械有限公司| 青岛鲁奥机械有限公司| 唐山津西钢铁有限公司| 起步有限公司上市排名| 广东达诚机械有限公司| 北京市政中燕工程机械制造有限公司| 海的动力机械有限公司| 四平方向机械有限公司| 苏州琦珏机械有限公司| 沈阳六和机械有限公司| 河北冀工机械制造有限公司| 十堰福堰钢铁有限公司| 扬州精辉试验机械有限公司| 广东龙辉基业建筑机械有限公司| 佛山松川机械设备有限公司| 沈阳联合利邦机械有限公司| 温州 轻工机械有限公司| 宁波市凯博数控机械有限公司 | 广州华劲机械有限公司| 山东骏腾起重设备有限公司| 宁波海雄塑料机械有限公司| 上海曼中机械有限公司| 焦作泰鑫机械有限公司| 台州瑞进机械有限公司| 大连 工程机械有限公司| 中核华兴达丰工程机械有限公司 | 浙江盾安机械有限公司| 河北犀牛民用机械有限公司| 机械设备租赁有限公司| 力源液压机械有限公司| 温州海翔机械有限公司| 杭州康发塑料机械有限公司| 杭州萧山鼎立机械有限公司| 龙岩市机械有限公司| 西安亿起来贸易有限公司| 上海鑫水机械有限公司| 新乡市豫成振动机械有限公司| 上海松精机械制造有限公司 | 南方力劲机械有限公司| 江苏 机械制造有限公司| 东光包装机械有限公司| 东莞市铖铭机械有限公司| 登福机械(上海)有限公司 | 潍坊广德机械有限公司| 河北小犟牛工程机械有限公司| 基伊埃机械设备天津有限公司| 张家港市港达机械有限公司| 宣威凤凰钢铁有限公司| 杭州金竺机械有限公司| 上海启秀机械设备有限公司|