环境:
- Appium:1.9.1
- Appium-desktop:1.7.1
- Xcode:10.0
- IOS:iPhone5S(10.3.3)
- Mac:10.13.6
①获取手机屏幕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
②滑动方法:
参考:《 》
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)
# 只供参考,但是不适用于pythonfinal 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();
③多个相同元素定位:
打开地址:
如图这里会定位出多个相同元素的信息,如果那个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】角标即可。
④隐藏弹出的输入法,因为怎么试都不行,后来采取的定位背景元素,点击背景,这样就可以间接关闭输入法。
⑤判断可不可以点击元素:
参考:《》
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").textprint(text)self.assertEqual(text,"xxx","显示不对!")
附录:
其他appium-IOS自动化API写法参考如下:
《 》
《》
《》
《》
《》
《》