0


Python selenium find_element()示例详解

selenium有以下定位方式:

1

2

3

4

5

6

7

8

driver.find_element_by_id(‘
id
')
driver.find_element_by_xpath(
'xpath'
)
driver.find_element_by_link_text(
'link_text'
)
driver.find_element_by_partial_link_text(
'partial_link_text'
)
driver.find_element_by_name(
'name'
)
driver.find_element_by_tag_name(
'tag_name'
)
driver.find_element_by_class_name(
'class_name'
)
driver.find_element_by_css_selector(
'css_selector'
)

但我们看下源码:

D:\Program Files\Python27\Lib\site-packages\selenium\webdriver\remote\webdriver.py

可以看到,上面那些定位方式,实际上都是调用的driver.find_element(by, value)

我们继续看下find_element()的源码,大部分方法最终全是通过By.CSS_SELECTOR来实现的查找

那By又都有哪些条件呢?

D:\Program Files\Python27\Lib\site-packages\selenium\webdriver\common\by.py

继续看源码,可以看到下面8种

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

所以我们以后就都只用find_element()就好了,因为最终实际上也都是调用的这个方法。

简单封装一下,以后就记住find_element()一个方法即可。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

from
selenium.common.exceptions 
import
TimeoutException
from
selenium.webdriver.support.ui 
import
WebDriverWait
from
appium 
import
webdriver
class
BasePage(
object
):
    
def
split_locator(
self
, locator):
        
"""
        
分解定位表达式,如'css,.username',拆分后返回'css selector'和定位表达式'.username'(class为username的元素)
        
:param locator: 定位方法+定位表达式组合字符串,如'css,.username'
        
:return: locator_dict[by], value:返回定位方式和定位表达式
        
"""
        
by 
=
locator.split(
','
)[
0
]
        
value 
=
locator.split(
','
)[
1
]
        
locator_dict 
=
{
            
'id'
: 
'id'
,
            
'name'
: 
'name'
,
            
'class'
: 
'class name'
,
            
'tag'
: 
'tag name'
,
            
'link'
: 
'link text'
,
            
'plink'
: 
'partial link text'
,
            
'xpath'
: 
'xpath'
,
            
'css'
: 
'css selector'
,
        
}
        
if
by 
not
in
locator_dict.keys():
            
raise
NameError(
"wrong locator!'id','name','class','tag','link','plink','xpath','css',exp:'id,username'"
)
        
return
locator_dict[by], value
    
def
wait_element(
self
, locator, sec
=
30
):
        
"""
        
等待元素出现
        
:param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'css,.username'
        
:param sec:等待秒数
        
"""
        
by, value 
=
self
.split_locator(locator)
        
try
:
            
WebDriverWait(
self
.driver, sec, 
1
).until(
lambda
x: x.find_element(by
=
by, value
=
value),message
=
'element not found!!!'
)
            
log.info(u
'等待元素:%s'
%
locator)
        
return
True
        
except
TimeoutException:
            
return
False
        
except
Exception, e:
            
raise
e
    
    
def
get_element(
self
, locator, sec
=
60
):
        
"""
        
获取一个元素
        
:param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'css,.username'
        
:param sec:等待秒数
        
:return: 元素可找到返回element对象,否则返回False
        
"""
        
if
self
.wait_element(locator, sec):
            
by, value 
=
self
.split_locator(locator)
            
try
:
                
element 
=
self
.driver.find_element(by
=
by, value
=
value)
                
log.info(u
'获取元素:%s'
%
locator)
                
return
element
            
except
Exception, e:
                
raise
e
        
else
:
            
return
False
    
def
get_elements(
self
, locator):
        
"""
        
获取一组元素
        
:param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'css,.username'
        
:return: elements
        
"""
        
by, value 
=
self
.split_locator(locator)
        
try
:
            
elements 
=
WebDriverWait(
self
.driver, 
60
, 
1
).until(
lambda
x: x.find_elements(by
=
by, value
=
value))
            
log.info(u
'获取元素列表:%s'
%
locator)
            
return
elements
        
except
Exception, e:
            
raise
e

以后调用,先定义元素,如

button = "id,su" # 页面上id为su的元素

在用例中查找时,只要写

find_element(button)

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】


本文转载自: https://blog.csdn.net/m0_70669463/article/details/135479880
版权归原作者 wanan安 所有, 如有侵权,请联系我们删除。

“Python selenium find_element()示例详解”的评论:

还没有评论