通过封装click一劳永逸的处理element click intercepted问题
时间: 2024-01-17 22:03:23 浏览: 26
在Web自动化测试中,我们常常会遇到element click intercepted问题,这是因为元素被其他元素遮挡导致无法点击。为了解决这个问题,我们可以使用一种通用的方法,即封装一个click方法,在其中加入重试机制。
具体实现如下:
```python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class BasePage:
def __init__(self, driver):
self.driver = driver
def click(self, locator):
"""封装click方法,加入重试机制"""
for i in range(3):
try:
element = WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable(locator))
element.click()
break
except:
pass
```
在上述代码中,我们通过元素定位器locator获取元素,然后使用WebDriverWait等待元素可点击,最后使用click()方法点击元素。如果在等待期间无法点击元素,则会抛出异常,此时我们可以选择忽略异常并重试。
使用时,我们只需要在页面对象中继承BasePage类,并调用click方法即可:
```python
class LoginPage(BasePage):
username_input = (By.NAME, "username")
password_input = (By.NAME, "password")
login_button = (By.CSS_SELECTOR, ".btn-login")
def login(self, username, password):
self.driver.get("http://www.example.com/login")
self.driver.maximize_window()
self.click(self.username_input)
self.driver.find_element(*self.username_input).send_keys(username)
self.click(self.password_input)
self.driver.find_element(*self.password_input).send_keys(password)
self.click(self.login_button)
```
在上述代码中,我们首先打开登录页面,然后使用click方法点击用户名输入框、密码输入框和登录按钮。如果在等待期间无法点击元素,则会自动重试3次。