利用ActionChains方法实现点击悬停显示列表元素

废话不多说,直接上图:
在这里插入图片描述
当鼠标移动到导入按钮上时,下载模板等列表选项才会显示。

因此,直接定位列表项肯定是定位不到的。

这时我们可以使用ActionChains(动作链)方法,模拟鼠标悬停,去实现定位该元素并点击。

示例代码片段:

注:常用元素操作方法已做个人二次封装,改为通用写法即可,直接搬运到你的代码中不好使哟^ _ ^

from selenium.webdriver.common.action_chains import ActionChains
class Test_bill:    
    def test_clickimport(self):
        # 鼠标悬停导入按钮,点击列表元素
        button = self.web.find(
            '//*[@id="app"]/div/div[2]/div[2]/div/div[1]/div/div/div/div[3]/div[1]/div[2]/div[1]/button/span')
        ActionChains(self.web.driver).move_to_element(button).perform()
        time.sleep(2)
        self.web.click('//ul[contains(@id,"dropdown-menu")]/div[1]/div/li')
        time.sleep(2)

首先,定位悬停元素位置,即导入按钮的位置,放入变量button;

然后,move_to_element()移动到元素上;

最后,perform()执行动作链中的所有动作。

当调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里。

调用perform()方法时,队列中的事件会依次执行

当然也可以采取一链到底的写法,虽然理论上没有语法错误,但不推荐这么写:

ActionChains(self.web.driver).move_to_element(mouse).click(hiddenMenu).perform()

因为鼠标悬停之后,隐藏列表展开需要一定的时间,会导致定位在元素加载出来之前已经执行,click事件点不到。

因此将点击隐藏列表选项的操作单独执行,并在此之前添加固定等待时间,确保稳定性。

另附:以下搬运过来的ActionChains主要方法

  • context_click()–此方法对页面元素执行右键单击操作。
  • click_and_hold()–此方法执行将鼠标左键按住到页面元素上的操作。
  • click()-此方法对页面的元素执行单击操作。
  • double_click()-此方法对页面的元素执行双击操作。
  • drag_and_drop()-此方法执行在源元素上按住鼠标左键的操作。然后移动到目标元素,最后释放鼠标按钮。
  • drag_and_drop()-此方法执行在源元素上按住鼠标左键的操作。然后移动到目标元素,最后释放鼠标按钮。
  • drag_and_drop_by_offset()-此方法执行将鼠标左键按住在源元素上的操作。然后移动到目标偏移量元素,最后释放鼠标按钮。
  • move_to_element()-此方法将鼠标移动到页面上元素的中间。
  • move_by_offset()-此方法将鼠标移动到距鼠标当前位置的偏移处。
  • key_up()–此方法释放修饰键。
  • key_down()–此方法仅执行发送按键操作,而不释放按键。
  • release()–此方法执行释放元素上按住的鼠标按钮的操作。
  • pause()-此方法在特定时间段内停止所有输入。
  • perform()-此方法执行一个接一个地排队的所有动作。
  • move_to_element_with_offset()-此方法将鼠标移动页面上指定元素的元素的偏移量。偏移量是相对于元素的左上角。
  • send_keys()–此方法执行将键发送到当前焦点的操作。
  • reset_actions()–此方法执行重置存储在本地以及远程上的所有操作的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值