Python selenium find_element()示例详解

2024-01-09 16:15:02

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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。