咨询热线0898-88889999
网站首页 关于傲世皇朝 傲世皇朝注册 傲世皇朝动态 傲世皇朝登录 傲世皇朝平台 傲世皇朝入口 傲世皇朝代理 联系我们
咨询热线
0898-88889999
地址:海南省海口市
邮箱:admin@youweb.com

傲世皇朝平台

当前位置: 首页 > 傲世皇朝平台

【技术】Selenium元素可定位,但不可操作,原因有哪些?--chatGTP

发布时间:2023-03-24 10:57:09 点击量:

hi~,我是测试人芸芸,一枚北漂女程序员,八小时外玩古筝。


昨天,在我愉快地编写自动化脚本时,出现了一只拦路虎。就是我想要的元素可定位,但不可点击,各种尝试后无果。


现在来求助一下知识百科--【chatGTP】。


问:elenium元素可定位,但不可点击,原因有哪些?请给出解决方案


Selenium元素可定位但不可点击的原因可能有很多,下面列出一些常见的情况和解决方案:

  1. 元素被遮挡:当一个元素被另外一个元素覆盖时,无法直接点击该元素。可以使用ActionChains类的move_to_element方法,将鼠标悬停在覆盖该元素的元素上,然后再点击该元素。另外,也可以使用execute_script方法修改元素的z-index属性,使其在最上层显示。代码示例【python】:



fromselenium.webdriver.common.action_chainsimportActionChains element=driver.find_element_by_xpath("//div[@class='hidden-element']")# 使用ActionChains将鼠标悬停在覆盖该元素的元素上hover_element=driver.find_element_by_xpath("//div[@class='outer']")ActionChains(driver).move_to_element(hover_element).click(element).perform()# 或者使用execute_script方法修改元素的z-index属性,使其在最上层显示driver.execute_script("arguments[0].style.zIndex='999'", element)element.click()

  1. 元素被隐藏:当一个元素的display属性为none或者visibility属性为hidden时,该元素无法直接点击。可以使用execute_script方法修改元素的display或visibility属性,使其可见,然后再点击该元素。代码示例:

element=driver.find_element_by_xpath("//div[@class='hidden-element']")# 使用execute_script方法修改元素的display属性,使其可见driver.execute_script("arguments[0].style.display='block'", element)# 或者使用execute_script方法修改元素的visibility属性,使其可见driver.execute_script("arguments[0].style.visibility='visible'", element)element.click()

  1. 元素被禁用:当一个元素的disabled属性为true时,该元素无法直接点击。可以使用execute_script方法修改元素的disabled属性,使其可操作,然后再点击该元素。代码示例:

element=driver.find_element_by_xpath("//button[@id='disabled-button']")# 使用execute_script方法修改元素的disabled属性,使其可操作driver.execute_script("arguments[0].removeAttribute('disabled')", element)element.click()

  1. 网页加载未完成:当一个元素还未完全加载时,可能无法直接点击该元素。可以使用WebDriverWait等待元素加载完成后再进行点击操作。代码示例:

from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import By # 等待元素加载完成element=WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='loaded-button']")))# 对元素进行点击操作element.click()

  1. 元素的操作方式不正确:当一个元素的操作方式不正确时,可能无法直接点击该元素。比如需要进行右击或者双击操作时,不能直接使用click方法进行点击。可以使用ActionChains类的context_click或者double_click方法,或者使用execute_script方法
  2. 进行右击或者双击操作。代码示例:


from selenium.webdriver.common.action_chains import ActionChains # 右击操作element=driver.find_element_by_xpath("//button[@id='right-click-button']")ActionChains(driver).context_click(element).perform() # 双击操作element=driver.find_element_by_xpath("//button[@id='double-click-button']")ActionChains(driver).double_click(element).perform() # 使用execute_script方法进行操作element=driver.find_element_by_xpath("//button[@id='right-click-button']")driver.execute_script("arguments[0].dispatchEvent(new MouseEvent('contextmenu',{'bubbles': true, 'cancelable': true, 'view': window}))", element) element=driver.find_element_by_xpath("//button[@id='double-click-button']")driver.execute_script("arguments[0].dispatchEvent(new MouseEvent('dblclick',{'bubbles': true, 'cancelable': true, 'view': window}))", element)

  1. 元素的JavaScript事件被阻止:当一个元素的JavaScript事件被阻止时,可能无法直接点击该元素。可以使用execute_script方法模拟触发事件。代码示例:


element=driver.find_element_by_xpath("//button[@id='blocked-click-button']")# 使用execute_script方法模拟点击事件driver.execute_script("arguments[0].click()", element)

  1. 元素不在当前的frame或window中:当一个元素不在当前的frame或window中时,无法直接点击该元素。可以使用switch_to方法切换到正确的frame或window中,然后再进行操作。代码示例:

# 切换到frame中进行操作frame=driver.find_element_by_xpath("//iframe[@id='frame']")driver.switch_to.frame(frame)element=driver.find_element_by_xpath("//button[@id='frame-button']")element.click() # 切换回主窗口进行操作driver.switch_to.default_content()element=driver.find_element_by_xpath("//button[@id='window-button']")element.click()

以上是一些常见的元素可定位但不可点击的原因和解决方案,但实际情况可能还有其他的原因,需要具体分析具体问题。


这是我和chatGTP多次交流后,取得的比较满意的答案。那我遇到的情况是否在这些解决方案中,需要看今天验证的结果,那就拭目以待吧。


文 / 测试人芸芸2023.03.14

日更 365天:今天是第106/365天我是谁?简书平台创作者,累计日更文字36w+

平台注册入口