selenium webdriver在firefox 上元素定位失败解决方法

 问题:需要点击A元素,但是该元素出现的方式 需要将鼠标悬停在A元素或点击A元素

原先的代码思路:

采用显性等待A元素出现后定位,再利用ActionChains类,将鼠标移至A元素,然后点击B元素

f_elem = wait.until(expected_conditions.presence_of_element_located([By.CSS_SELECTOR,".service"]))

action = ActionChains(d)

# 移动到元素上,.perform动作执行
action.move_to_element(f_elem).perform()
h_elem = wait.until(expected_conditions.visibility_of_element_located([By.XPATH, "//*[text()='xx']"]))
action.click(h_elem).perform()

在谷歌浏览器执行正常,但是在firefox上执行失败,定位到A元素,但是并未悬停。

后面在定位A元素前在该页面强制等待了xx秒,鼠标可以悬停了,又遇到另一个问题,就是悬停之后,右侧出现了一个滚动条(谷歌浏览器无该滚动条),不能直接找到元素点击了,因为元素不在可视范围内,原先采取的是selenium自带的元素滚动到可视范围,不知道为啥这一句有阴影,所以换成了js自带的滚到可视范围。滚动到可视范围后依然不能点击,报如下图错误,后选择强制等待可以点击了。

 

# 加上强制等待
time.sleep(4)
# 定位服务中心

f_elem = wait.until(expected_conditions.presence_of_element_located([By.CSS_SELECTOR,".service"]))

action = ActionChains(d)

# 移动到元素上,.perform动作执行
action.move_to_element(f_elem).perform()
h_elem = wait.until(expected_conditions.visibility_of_element_located([By.XPATH, "//*[text()='呼叫中心-运管系统']"]))
d.execute_script('arguments[0].scrollIntoView({block: "center"})', h_elem)
time.sleep(3)
action.click(h_elem).perform()

虽然已经解决了该问题,但不知道原理是什么。

1.已经采用显示等待A元素出现才进行的悬停操作,为什么还要加上强制等待?

2. 元素已滚动到可视范围内,但是却不能点击

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值