selenium---滚动日历定位(TouchActions)

  前几天见测试群里有人问,如果定位web页面上的滚动日历,安静简单的定位,分享给大家

滚动日历

我们先看看滚动日历是什么样子的,下图就是安静在网上随便找的滚动日历内容。

手工操作

在写代码前,首先要弄清楚,手工测试的时候如何进行操作滚动日历的,手工测试时,我们通过鼠标上的滚轮进行操作的,通过向上或者向下进行滚动选择日期。那么问题来了,我们怎么控制鼠标的滚轮呢?前面介绍了鼠标的操作,其实还有鼠标的滚动没有给大家介绍,借此机会,进行补充

TouchActions

TouchActions是selenium中的一个库,主要用来进行操作H5页面上的一些鼠标操作,比如鼠标滑动,点击,拖动等

中文文档:https://python-selenium-zh.readthedocs.io/zh_CN/latest/7.2%20%E8%A1%8C%E4%B8%BA%E9%93%BE/

导入方法: from selenium.webdriver import TouchActions 

主要方法有:

  • double_tap(on_element)   双击
  • flick_element(on_element, xoffset, yoffset, speed)   从元素开始以指定的速度移动
  • long_press(on_element)   长按不释放
  • move(xcoord, ycoord)   移动到指定的位置
  • perform()   执行链中的所有动作
  • release(xcoord, ycoord)   在某个位置松开操作
  • scroll(xoffset, yoffset) #滚动到某个位置
  • scroll_from_element(on_element, xoffset, yoffset)   从某元素开始滚动到某个位置
  • tap(on_element)      单击
  • tap_and_hold(xcoord, ycoord)     某点按住

本章处理日历操作主要运用了元素滚动内容,处理此操作,安静先整理下思路

1、定位日历上的元素

2、通过scroll_from_element(on_element, xoffset, yoffset) 方法进行滚动

如果没有用过方法的小伙伴们,可以查看下源码进行分析

def scroll_from_element(self, on_element, xoffset, yoffset):
        """
        从on_element开始触摸和滚动,通过xoffset和yoffset移动。

        :Args:
         - on_element: The element where scroll starts.
         - xoffset: X offset to scroll to.
         - yoffset: Y offset to scroll to.
        """
        self._actions.append(lambda: self._driver.execute(
            Command.TOUCH_SCROLL, {
                'element': on_element.id,
                'xoffset': int(xoffset),
                'yoffset': int(yoffset)}))
        return self

其中xoffset,和yoffset表示X ,Y轴

注意:向上移动值负,向下移动值为正

方法也看了,思路也清楚了,动手写一写代码

from selenium import webdriver
import time
from selenium.webdriver import TouchActions
driver = webdriver.Chrome()
driver.get('https://www.jq22.com/yanshi3714')
time.sleep(2)
driver.switch_to.frame("iframe")
driver.find_element_by_xpath('//*[@id="text"]').click()
list = driver.find_elements_by_xpath('//*[@class="dwwo"]')
year = list[0]
month = list[1]
day = list[2]
a = TouchActions(driver)
# 滑动月
a.scroll_from_element(month,0,-8).perform()
# 滑动日
a.scroll_from_element(day,0,8).perform()
# 滑动年
a.scroll_from_element(month,0,8).perform()

通过上面的动图发现,已经成功的进行了滚动,具体的实际范围的话,可能需要自己进行多次每次滚动多少进行选择了。

安静只是简单的介绍了TouchActions的一种用法,其他的用法,以后也会慢慢进行补充。点个关注,不容错过~~

原文地址:https://www.cnblogs.com/qican/p/14062901.html