1. 程式人生 > >【Mac + Appium學習(四)】之常用的IOS自動化測試API總結 Selenium2+python自動化36-判斷元素存在 Appium+Python3+iOS定位元素

【Mac + Appium學習(四)】之常用的IOS自動化測試API總結 Selenium2+python自動化36-判斷元素存在 Appium+Python3+iOS定位元素

環境:

  • 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寫法參考如下:

Appium Appium Python API 中文版 By-HZJ

Python + Appium+ IOS自動化測試

Appium+Python3+iOS定位元素

appium---appium 常見API

Github:appium提問題地址

Appium之主要的元素定位疑點難點