- 高亮元素
def
highlight
(func):
def
apply_style
(element):
# 实现的方式很简单,就是定位到元素后,执行js样式
driver
.
execute_script(
"arguments[0].style.border='6px solid red'"
, element)
@wraps
(func)
def
wrapper
(
self
,
*
args,
**
kwargs): element
=
func(
self
,
*
args,
**
kwargs) apply_style(element)
return
element
return
wrapper
- 截图定位的元素
def
screenshot
(func):
def
screen_shot
(screen_name): driver
.
save_screenshot(screen_name)
@wraps
(func)
def
wrapper
(
self
,
*
args,
**
kwargs): element
=
func(
self
,
*
args,
**
kwargs) screen_shot(
str
(args[
-1
])
+
'.jpg'
)
# 默认是以定位元素属性为文件名
return
element
return
wrapper
- 使用
class
Action
(
object
):
def
__init__
(
self
, driver):
self
.
driver
=
driver
@screenshot
@highlight
def
find_element
(
self
,
*
loc):
try
: WebDriverWait(
self
.
driver,
15
)
.
until(
lambda
driver: driver
.
find_element(
*
loc)
.
is_displayed())
return
self
.
driver
.
find_element(
*
loc)
except
Exception
as
e:
return
e
- 测试
driver
=
webdriver
.
Chrome()driver
.
get(
'http://www.baidu.com'
)action
=
Action(driver)action
.
find_element(By
.
ID,
'su'
)time
.
sleep(
3
)driver
.
quit()
- 如果没封装一层定位方法,可以使用如下方式,稍微和上面有些不同,该方法会在定位前后截图,可以用来对比。
def
highlight
(element, element_name
=
None
, debug
=
True
):
''' debug 参数用来开关截图功能 '''
# 高亮元素
def
apply_style
(): driver
.
execute_script(
"arguments[0].style.border='6px solid red'"
, element)
# 截图
def
screen_shot
(screen_name): driver
.
save_screenshot(screen_name)
if
debug:
try
: screen_shot(
str
(element_name)
+
'_before.jpg'
) apply_style() screen_shot(
str
(element_name)
+
'_after.jpg'
)
except
Exception
as
e:
return
e apply_style()
# 使用也很简单
element
=
driver
.
find_element(By
.
ID,
'kw'
)highlight(element,
'kw'
)