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


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

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

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

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

    driver.set_window_size(1024, 768)
    

    3、需要修改源码service.py的send_remote_shutdown_command,否则driver.quit() 时会报错。详细讨论看:http://stackoverflow.com/questions/36153007/permission-error-if-to-use-phantomjs

    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提供的定位控件方法如下:

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

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

    .click 点击
    .send_keys 按键输入
    .text  获取控件的文本
    .get_attribute  获得控件指定的属性值
    

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

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

    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 a 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')
  • 相关阅读:
    hibernate中HQL多对多的查询
    Georgia Tech- 新的篇章
    吴军《智能时代》读书笔记
    P5项目完成记录
    Codewar python训练题全记录——持续更新
    优达学城纳米学位P5项目知识点总结——github使用
    优达学城数据分析师纳米学位——P5项目知识点整理贝叶斯规则
    优达学城数据分析师纳米学位——P5项目知识点整理机器学习基本术语
    P3-SQL 学习笔记
    HTML+CSS 学习笔记
  • 原文地址:https://www.cnblogs.com/idbeta/p/5378601.html
Copyright © 2020-2023  润新知