如何封装execute_script函数
时间: 2023-08-10 10:09:35 浏览: 132
JavaScript自执行函数和jQuery扩展方法详解
在Python中,我们可以使用装饰器来封装函数。下面是一个示例,演示如何使用装饰器封装execute_script函数:
```python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def execute_script(driver, script):
return driver.execute_script(script)
def wait_for_element(driver, locator):
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located(locator)
)
return element
def script_executor(func):
def wrapper(driver, *args, **kwargs):
wait_for_element(driver, kwargs['locator'])
return func(driver, kwargs['script'])
return wrapper
@script_executor
def execute_script(driver, script):
return driver.execute_script(script)
```
这里我们定义了一个名为`script_executor`的装饰器,它接受一个函数作为参数,并返回一个新的函数作为装饰后的函数。该新函数会先等待元素出现,然后再执行原本的execute_script函数。我们可以将需要执行JavaScript的函数都加上这个装饰器,从而实现对这些函数的统一封装。
使用示例:
```python
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.google.com")
search_box = driver.find_element_by_name("q")
execute_script(driver, script="arguments[0].setAttribute('value', 'Hello, World!')", locator=(By.NAME, "q"))
```
在执行execute_script函数时,该函数会先等待搜索框出现,然后再执行JavaScript代码。这样就能够确保元素已经加载完毕,避免了因元素未加载导致的执行错误。
阅读全文