ActionChains(driver).drag_and_drop_by_offset().perform().release()
使用上面的方法移动下面的控件时候就会滑动距离会递增,由于浏览器接口没有清零坐标,导致第二次再滑动时,是在原来的坐标上再次移动多了第一次滑动的距离,假如第一次滑动X1,第二次滑动X2,实际上第二次滑动的距离为X1+X2,第三次滑动的距离为X1+X1+X2+X3。查看webdriver的代码没这方面的方法。后来用一个递归的函数来滑动到想要的元素。调用底层的接口函数Command.XXX。
具体代码如下:
-
def move(self,driver,beginElementId,endElementText,height,selectElementText):
-
beginElement=driver.find_element_by_xpath(beginElementId)
-
-
if(beginElement.text.find(endElementText)==0):
-
return True
-
else:
-
#beginElement=driver.find_element_by_xpath('//div[@class="'+str(beginElementId)+'"]/div/div[@class="picker-item picker-selected"]')
-
moveDic={'xoffset':0,'yoffset':0}
-
driver.execute(Command.MOVE_TO,{'element': beginElement.id})
-
driver.execute(Command.MOUSE_DOWN,{})
-
moveDic['yoffset']=-int(2*height-int(height/2))
-
driver.execute(Command.MOVE_TO,moveDic)
-
time.sleep(0.5)
-
driver.execute(Command.MOUSE_UP,{})
-
driver.find_element_by_xpath('//div[@class="mint-popup mint-popup mint-popup-bottom"]/div/span[contains(text(),"完成")]').click()
-
time.sleep(1)
-
driver.find_element_by_xpath('//input[@placeholder="'+str(selectElementText)+'"]').click()
-
time.sleep(0.5)
-
self.move(driver, beginElementId, endElementText, height, selectElementText)
调用:
self.move(driver, '//div[@class="mint-popup mint-popup mint-popup-bottom"]/div['+str(i)+']/div/div/div[@class="picker-slot picker-slot-center slot3"]/div/div[@class="picker-item picker-selected"]', endElementText=abodeCity,height=height,selectElementText='请选择所在城市')