用phantomjs进行web界面自动化测试的几个注意点

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

貌似我以前说过不少界面自动化测试的坏话,哈哈。最近接触了phantomjs,发现用它进行web界面测试也挺有意思的,下面举几个我使用过程中发现的注意点。

1、需要指定phantomjs位置,否则使用时会报错

1

driver = webdriver.PhantomJS(executable_path=r'D:\phantomjs-2.1.1-windows\bin\phantomjs.exe')#在windows中使用phatomjs,需要在这里指定可执行文件的位置,或者修改系统宏也行

2、需要指定虚拟窗口的分辨率,否则截图时可能会报错:Element is not currently visible and may not be manipulated exception。详细讨论看:Element is not currently visible and may not be manipulated exception · Issue #11637 · ariya/phantomjs · GitHub

1

driver.set_window_size(1024768)

3、需要修改源码service.py的send_remote_shutdown_command,否则driver.quit() 时会报错。详细讨论看:python - Permission Error if to use PhantomJS - Stack Overflow

1

2

3

4

5

6

def send_remote_shutdown_command(self):

        try:

            if self._cookie_temp_file:

                os.remove(self._cookie_temp_file)

        except Exception,info:

            pass

4、有时候定位失败可能是因为网页还未加载完,可以加个sleep或者WebDriverWait试试

无论是web还是gui,界面测试最重要的就是定位控件,再进行操作。phantomjs提供的定位控件方法如下:

1

2

3

4

5

6

7

8

def find_element_by_id(self, id_):

def find_element_by_xpath(self, xpath):

def find_element_by_link_text(self, link_text):

def find_element_by_partial_link_text(self, link_text):

def find_element_by_name(self, name):

def find_element_by_tag_name(self, name):

def find_element_by_class_name(self, name):

def find_element_by_css_selector(self, css_selector):

还有一类是find_elements的,含义和上面的相同,只不过是寻找出目标网页中具有相同条件的一批控件罢了,这样就可以同时对多个控件进行同样的操作了。

说到操作,定位控件之后,接着就是对控件进行操作,常见的控件操作如下:

1

2

3

4

.click 点击

.send_keys 按键输入

.text  获取控件的文本

.get_attribute  获得控件指定的属性值

使用phantomjs时最好结合chrome的f12(dev_tool),这样对于不懂html的同学(如我)来说事半功倍。

最后,再举几个phantomjs的简单使用例子:

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

url = r'https://www.so.com/'

driver.get(url)

input_by_id = driver.find_element_by_id('input')

input_by_id.send_keys(u'测试find_element_by_id')

button_by_id = driver.find_element_by_id('search-button')

button_by_id.click()

time.sleep(1)

driver.save_screenshot('byid.png')

url = r'https://www.so.com/'

driver.get(url)

input_by_name = driver.find_element_by_name('q')

input_by_name.send_keys(u'测试find_element_by_name')

button_by_class_name = driver.find_element_by_class_name('skin-search-button')

button_by_class_name.click()

time.sleep(1)

driver.save_screenshot('byname.png')

url = r'https://www.so.com/'

driver.get(url)

input_by_class_name= driver.find_element_by_class_name('placeholder')

input_by_class_name.send_keys(u'测试find_element_by_class_name')

button_by_class_name = driver.find_element_by_class_name('skin-search-button')

button_by_class_name.click()

time.sleep(1)

driver.save_screenshot('byclassname.png')

url = r'https://www.so.com/'

driver.get(url)

button_by_link_text = driver.find_element_by_link_text('问答')

button_by_link_text.click()

time.sleep(1)

driver.save_screenshot('bylinktext.png')

url = r'https://www.so.com/'

driver.get(url)

button_by_partial_link_text = driver.find_element_by_partial_link_text('问')

button_by_partial_link_text.click()

time.sleep(1)

driver.save_screenshot('bypartiallinktext.png')

url = r'https://www.so.com/'

driver.get(url)

input_by_xpath = driver.find_element_by_xpath('//*[@id="input"]')

input_by_xpath.send_keys(u'测试find_element_by_xpath')

button_by_id = driver.find_element_by_id('search-button')

button_by_id.click()

time.sleep(1)

driver.save_screenshot('byxpath.png')

url = r'https://www.so.com/'

driver.get(url)

input_by_css_selector = driver.find_element_by_css_selector('#input')

input_by_css_selector.send_keys(u'测试find_element_by_css_selector')

button_by_id = driver.find_element_by_id('search-button')

button_by_id.click()

time.sleep(1)

driver.save_screenshot('bycssselector.png')

url = r'https://www.so.com/'

driver.get(url)

input_by_tag_name = driver.find_elements_by_tag_name('input')#tag表示标签,当网页存在同标签名的控件时,一般用for进行定位比较好

for in input_by_tag_name:

    if a.get_attribute('type'== 'text':

        a.send_keys(u'测试find_element_by_tag_name')

button_by_tag_name= driver.find_element_by_id('search-button')

button_by_tag_name.click()

time.sleep(1)

driver.save_screenshot('bytagname.png')

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员二黑

V:testerhei

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值