作业(2)
23、Java的继承与Python的继承有什么区别
(1) Java的继承:单继承
(2)Python的继承:多继承
24、如果子类重写了父类的方法,那么实例化子类后,调用重写后的方法,调用的是子类的方法还是父类的方法
当子类重写父类的方法后,子类实例化后,调用重写的方法,优先考虑的是子类的方法
继承里面的第一个原则:当实例化类后,子类对象调用的方法和父类里面的方法重名,优先考虑子类的方法(前提:单继承)
class Father(object): #父类(基类)
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
print('name is {0},and age is {1}'.format(self.name,self.age))
objWork=(name='lyl',age=18)
objWork.show()

当子类重写父类的方法后,子类实例化后:
class Father(object): #父类(基类)
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
print('name is {0},\nand age is {1}'.format(self.name,self.age))
objFather=Father(name='lyl',age=18)
objFather.show()
class Son(Father): #子类(派生类)继承父类(基类)
def __init__(self,name,age,salary): #继承父类并重写父类的方法
#super()的方法继承父类的实例属性
super().__init__(name,age)
#继承父类
#Person.__init__(self,name,age)和 super().__init__(name,age)效果一样
self.salary=salary
def show(self):
print('name is {0},\nand age is {1},\nand salary is {2}'.format(self.name,self.age,self.salary))
objSon=Son(name='lyl',age=18,salary=200.3)
#重新调用子类的show(),因为父类的满足不了子类
objSon.show()
子类调用父类之后,重写了父类的方法,最后优先考虑子类

UI自动化测试:
1、常用的元素定位有那几种方法,请举例说明
常用的元素定位得方法有八种,(1)其中有七种是单元素定位,如:ID、NAME、CLASS-NAME、XPATH、CSS-SELECTOR、LINK-TEXT、PARTIAL-LINK-TEXT;
(2) 还有一种是多元素定位,如:TAG-NAME
比如:百度搜索框,
(1)通过id来定位搜索框;
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as t
'''通过ID来定位'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_elements_by_id('kw').send_keys("hello world")
t.sleep(5)
(2)、通过name来定位;
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as t
'''通过name来定位'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_name('wd').send_keys("hello world")
t.sleep(5)
(3)、通过class_name来定位;
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as t
'''通过class_nam来定位'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_class_name('s_ipt').send_keys("hell world")
t.sleep(5)
(4)、通过xpath来定位;
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as t
'''通过xpath的定位方式'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
#先定位到需要的代码行处,鼠标右键copy——>copy Xpath
driver.find_element_by_xpath('//*[@id="kw"]').send_keys("hell world")
t.sleep(5)
(5)、通过css_selector来定位;
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as t
'''通过css_selector来定位'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
#先定位到需要的代码行处,鼠标右键copy——>copy css_selector
driver.find_element_by_css_selector('#kw').send_keys("hell world")
t.sleep(5)
(6)、通过link_text来定位;
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as t
'''通过LINK_TEXT来定位(精准定位)'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_link_text('直播').click()
t.sleep(5)
(7)、通过partial_link_text来定位;
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as t
'''通过PARTIAL_LINK_TEXT来定位(模糊定位)'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_partial_link_text('播').click()
t.sleep(5)
(8)、通过tag_name来定位;
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as t
'''通过tag_name来定位(多个元素定位的方式)'''
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
tag=driver.find_elements_by_tag_name('input')
tag[7].send_keys('hello world')
t.sleep(5)
driver.quit()
2、单个元素定位与多个元素定位的区别是什么?
(1)单元素定是按照元素属性定位的。
(2)多元素定位的结果是以列表的形式呈现的,是按照列表的来定位到具体元素的索引。
3、如果是iFrame的框架,如何来定位里面的元素属性的对象
需要先调用switch_to.frame()的方法通过索引或者ID的方式进入框架里面,然后再定位元素属性。
4、怎么理解页面对象设计模式
页面对象设计模式:每个页面都建对应的class,类中包含了页面的输入框、标题、元素等元素,测试代码中测试这个页面时,只需要调用这个页面类(页面对象)里的页面元素即可,这样实现了将测试对象(页面对象)和测试脚本(用例脚本)分离,如果元素ID等发生变化时,不需要去修改测试代码,只需要在页面类中修改即可,利于维护所有脚本。
5、怎么理解显式等待和隐式等待
(1)显示等待:显示等待是单独针对某个元素,设置一个等待时间如5秒,每隔0.5秒检查一次是否出现,如果在5秒之前任何时候出现,则继续向下,超过5秒尚未出现则抛异常
element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(By.ID,‘kw’))
element.sendkeys("xxx")
(2)隐式等待:隐式等待是全局的是针对所有元素,设置等待时间如10秒,如果10秒内出现,则继续向下,否则抛异常。可以理解为在10秒以内,不停刷新看元素是否加载出来。
driver.implicitly_wait(10)
6、在测试中遇到多窗口,具体怎么解决,请描述具体的步骤和编写具体的案例代码
比如在网易邮箱界面,我们需要注册一个新的帐户,首先我们需要进入到网易邮箱的登录界面,然后通过XPATH或者LINK-TEXT的方式来获取注册网易邮箱的元素定位,这时就出现了多窗口的情况,我们需要先获取当前注册网易邮箱的窗口,然后再获取所有的窗口,循环所有的窗口,再判断是否当前的窗口是否是点击注册网易邮箱后跳转后的注册网易免费邮箱窗口,进入这个窗口,再获取当前窗口的地址,断言后退出。
#导入webdiver
from selenium import webdiver import time as t #打开浏览器Chrome driver=webdriver.Chrome() #窗口最大化 driver.maximize_window() #获取网易邮箱地址,打开网易邮箱页面 driver.get('https://mail.163.com/') #进入iframe框架 driver.switch_to.frame(0) #缓冲两秒的时间 t.sleep(2) #获取注册网易邮箱界面 now=driver.current_window_handle #定位网易邮箱元素并点击注册网易邮箱 diver.find_element_by_link_text('网易邮箱注册').click() #获取所有的窗口 all=driver.window_handles #循环所有的窗口 for handler in all: #判断当前窗口(是不是点击网易邮箱后跳转的注册网易免费邮箱界面) if handler!=now: #进入当前窗口 driver.switch_to.window(handler) #获取当前窗口得地址 url=driver.current_url print(url.endswith('utm_source=163mail')) #断言,如果是当前窗口,执行代码后返回一个Ture值 assert=url.endswith('utm_source=163mail')==True #缓冲两秒的时间 t.sleep(2) #退出 driver.quit()
单元测试框架:
1、unittest与pytest的框架

2、unittest的常用组件有哪些
unittest常用的组件一共有五个,分别是:测试用例(TestCase)、测试固件(TestFixTure)、测试套件(TestSuite)、测试执行(TestRunner)、测试报告(TestReport);
3、unittest中怎么理解测试固件
测试固件:用于处理初始化的操作。
4、怎么理解setUp(),tearDown()与类测试固件的测试
(1)setUp(),tearDown():每个测试用例都会被执行一次测试固件,
(2)类测试固件(setupclass()和tearDownclass()):所有的测试用例只执行一次测试固件
5、在unittest测试框架中,加载所有的测试模块使用到的方法是什么?具体参数是什么?
加载所有的测试模块使用到的方法是:discover
具体参数是:
6、在unittest中使用那个库来生成对应的测试报告
使用HTMLTestRunner
7、一个完整的测试用例包含哪些步骤
拿到测试需求 -> 分析需求(画思维导图) -> 编写⽤例 -> 划分⽤例优先级
8、怎么理解参数化(parameterized)
一个测试点,有多个测试用例,它的原理和核⼼思想是在执⾏的过程中,它把列表⾥⾯的值⾸先进⾏循环,然 后把param元组⾥⾯的值赋值给测试⽅法⾥⾯对应的参数
4、测试按阶段划分,主要分为那几个阶段
按阶段划分(开发流程的阶段):单元测试;集成测试;系统测试;验收测试;
5、怎么理解等价类和边界值
等价类分为:有效等价类和无效等价类,例如一年十二个月,数字1-12则是有效等价类,数字小于1,大于12的,则是无效等价类。
边界值是对等价类的补充,
6、请描述一个完整的测试流程

浙公网安备 33010602011771号