selenium实现模块化
来源:互联网 发布:学校网络系统集成方案 编辑:程序博客网 时间:2024/05/21 18:31
在selenium的自动化脚本中,有许多东西是总是调用的,比如登陆,那么就可以将其模块化,独立出来,从而可以使自动化脚本更加简洁.如下以登陆为例来实现模块化:
现有一个自动化脚本如下,为验证是否正常登陆的:
test1.py
# -*- coding: UTF-8 -*-'''Created on 2015年3月28日@author: dff'''from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.common.exceptions import NoAlertPresentExceptionimport unittest, time, refrom selenium.webdriver.support.wait import WebDriverWaitclass Login_user(unittest.TestCase): def setUp(self): self.driver =webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "http://192.168.11.14/" self.verificationErrors = [] self.accept_next_alert = True self.driver.get(self.base_url + "/auth/login/") def test_login_admin(self): '''管理员用户登陆''' driver=self.driver time.sleep(0.5) driver.find_element_by_id("id_username").clear() driver.find_element_by_id("id_username").send_keys("admin") driver.find_element_by_id("id_password").clear() driver.find_element_by_id("id_password").send_keys("ADMIN_PASS") driver.find_element_by_xpath("//button[@type='submit']").click() driver.get_window_position(windowHandle) d=driver.get_window_size('current') print d print driver.get_window_position("current") url=driver.current_url print url handle=driver.current_window_handle print handle self.assertEqual( u"使用概况 - Delicate Cloud Dashboard", driver.title,'login fail') def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException: return False return True def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException: return False return True def close_alert_and_get_its_text(self): try: alert = self.driver.switch_to_alert() alert_text = alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert = True def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors)if __name__ == "__main__": unittest.main()下面需要将login那部分模块化,即如下部分
driver.find_element_by_id("id_username").clear() driver.find_element_by_id("id_username").send_keys("admin") driver.find_element_by_id("id_password").clear() driver.find_element_by_id("id_password").send_keys("ADMIN_PASS") driver.find_element_by_xpath("//button[@type='submit']").click()那么我们新建一个module,为action.py,如下:
# -*- coding:UTF-8 -*-'''Created on 2015年4月2日@author: dff'''import unittest,timefrom selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.common.exceptions import NoAlertPresentExceptionfrom selenium.webdriver.support.wait import WebDriverWaitclass lo(): def __init__(self,driver): self._driver=driver def login_(self,name='admin',pw='ADMIN_PASS'): self._driver.find_element_by_id("id_username").clear() self._driver.find_element_by_id("id_username").send_keys(name) self._driver.find_element_by_id("id_password").clear() self._driver.find_element_by_id("id_password").send_keys(pw) self._driver.find_element_by_xpath("//button[@type='submit']").click()
另外此文件的放置位置我放在另外一个package中,路径如下:
webtest-->src-->justfortest/test1.py
common/action.py
那么在test1.py中调用可以用如下方法:
本例中将此登陆调用放在setup函数中:
首先需要import此模块,如
from common.action import lo
修改后部分代码如下:
class Login_user(unittest.TestCase): def setUp(self): self.driver =webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "http://192.168.11.14/" self.verificationErrors = [] self.accept_next_alert = True self.driver.get(self.base_url + "/auth/login/") lo(self.driver).login_()上面代码中红色部分即为调用登陆,实测结果如下:
{u'width': 1164, u'height': 629}
{u'y': 24, u'x': 436}
http://192.168.11.14/admin/
{ce3619ce-bb1b-492f-ba92-6585e05f8416}
.
----------------------------------------------------------------------
Ran 1 test in 10.524s
OK
如此即可将test_admin_login函数中的登陆部分去掉,实现模块化脚本;
以此为方法,可将其他部分模块化,如退出,切换目录等;
0 0
- selenium实现模块化
- 什么是模块化,模块化开发如何实现?
- 用函数实现模块化
- CSS实现模块化效果
- 模块化加载的实现
- JS模块化简单实现
- ASP使用类,实现模块化
- ASP使用类,实现模块化
- 模块化动态划线实现解读
- JavaScript模块化实现库教程
- Extjs3+sea.js 实现模块化
- (3)javascript实现模块化
- web模块化规范和实现
- vue.js+webpack 实现模块化
- C#工程的模块化实现
- SeaJS实现模块化JavaScript开发
- Android 模块化完整方案实现
- 使用requirejs编程实现模块化
- [ACM] HDU 1796 How many integers can you find (容斥原理)
- cocos2d使用jni调用java代码时报jni.h找不到错误
- 希尔排序
- Java垃圾回收机制
- Xcode_制作并使用静态类库
- selenium实现模块化
- 开源的高性能Java集合:GNU Trove介绍
- ping 255.255.255.255
- javax.persistence.schema-generation.scripts.action
- Hadoop2.6.0 + zookeeper集群环境搭建
- WCF的一些配置
- 创建者模式——原型模式(Prototype)(5)
- Java多线程-工具篇-BlockingQueue
- AFNnetworking快速教程,官方入门教程译