環境:
- Appium:1.9.1
- Appium-desktop:1.7.1
- Xcode:10.0
- IOS:iPhone5S(10.3.3)
- Mac:10.13.6
①獲取手機屏幕size:長、寬
《Appium Appium 1.9 版本 BUG:使用 get_window_size () 方法報錯》
解決辦法:
# 修改路徑
......\...python3.6.1-path\Lib\site-packages\selenium\webdriver\remote\remote_connection.py
# 300行
# 原代碼
Command.W3C_GET_WINDOW_SIZE:
('GET', '/session/$sessionId/window/size'),
# 替換為
Command.W3C_GET_WINDOW_SIZE:
('GET','/session/$sessionId/window/$windowHandle/size'),
解決size報錯之后:
# 獲取手機屏幕長和寬 self.size = self.d.get_window_size() # 獲取寬度一半 self.half_Width = self.size['width']/2 # 獲取長度一半 self.half_Width = self.size['height']/2
②滑動方法:
參考:《Appium 急急急:Appium1.5.3 有沒有針對 iOS 屏幕滑動的新方法,swipe 坐標滑動已經不支持了,求 Python 語言新解決方法》
def do_swipe(self,x1,y1,x2,y2):
'''
# 滑動方法
:return:
'''
self.d.execute_script("mobile: dragFromToForDuration",
{"fromX": x1, "fromY": y1, "toX": x2, "toY": y2, "duration": 0.5})
②-1:上、下、左、右,滾動方法:
driver.execute_script('mobile:scroll', {'direction': '參數'}) # 參數:down,up,right,left
②-2:另外,如果想模擬滑動軌跡,如手勢解鎖,可以這樣(先make一下:TouchAction)
# 只供參考,但是不適用於python
final TouchAction gesture = new TouchAction(driver).press(startX, stratY)
.moveTo(startX, stratY + height)
.moveTo(startX, stratY + height + height)
.moveTo(startX + width, stratY + height + height).release();
gesture.perform();
③多個相同元素定位:

打開地址:http://localhost:8100/inspector

如圖這里會定位出多個相同元素的信息,如果那個appium-desktop定位不出元素,我們就采取這種方式獲取屬性定位。
既然找到元素屬性了,那如何寫代碼定位呢?如下:
# 點擊第一個相同元素
self.d.find_elements_by_name("home arrow news")[0].click()
# 點擊第二個相同元素
self.d.find_elements_by_name("home arrow news")[1].click()
# 點擊第三個相同元素
self.d.find_elements_by_name("home arrow news")[2].click()
只需要加上【index】角標即可。
④隱藏彈出的輸入法,因為怎么試都不行,后來采取的定位背景元素,點擊背景,這樣就可以間接關閉輸入法。
⑤判斷可不可以點擊元素:
參考:《Selenium2+python自動化36-判斷元素存在》
def isExist(self,i):
'''
# 判斷可不可以點擊元素
:param i:
:return:
'''
try:
print("已選擇:[%s]" % i)
self.d.find_element_by_name(i).click()
return True
except:
return False
⑤-1判斷元素存不存在:
exist = self.d.find_element_by_name(i).is_enabled() print(exist) # True/False
⑥常用定位元素方法:
# class_name定位
self.d.find_element(By.CLASS_NAME,"XCUIElementTypeTextField")
# accessibility_id定位
self.d.find_element_by_accessibility_id("login_bg_top")
# name定位
self.d.find_element_by_name("home btn newtask")
# xpath定位
self.d.find_element_by_xpath('//XCUIElementTypeStaticText[@name="xxx"]')
# 還有其他的等等定位詳情參考附錄的文章
⑦點擊元素
self.d.find_element_by_name("home btn newtask").click()
⑧輸入值
self.d.find_element_by_accessibility_id("請輸入內容").send_keys("xxx")
⑨斷言
# 獲取元素的值進行斷言
text = self.d.find_element_by_accessibility_id("xxx").text
print(text)
self.assertEqual(text,"xxx","顯示不對!")
附錄:
其他appium-IOS自動化API寫法參考如下:

