一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“API:操作API(三)”。
(11)复选框(CheckBox) 操作。
仍旧通过elenium.is_selected()来判断复选按钮是否被选择。
案例4-64:选择复选框中的一个选项。
对于下面的HTML。
<h4>选择课程</h4>
<form>
<input id="c1" type="checkbox">selenium<br>
<input id="c2" type="checkbox">python<br>
<input id="c3" type="checkbox">appium<br>
如下Selenium测试代码。
def test_CheckChecxBoxByOne(self):
element = self.driver.find_element_by_id("c1")#定位第一个选项
if not element.is_selected():#由于多选框,如果是选择状态,点击变为未选择状态。反之,如果是未选择状态,点击变为选择状态,所有这里用if语句进行判断
element.click()#如果复选框未选,则点击它
self.assertTrue(element.is_selected(),"复选框未被选中!")# 断言“selenium”复选框被选中
案例4-65:选择复选框中的所有选项。
对于案例4-62同一个的HTML,有如下Selenium测试代码。
def test_CheckChecxBoxByAll(self):
checkbox= self.driver.find_elements_by_xpath("//input[@type='checkbox']")#这里用find_elements…
for i in checkbox:#遍历所有复选框
if not i.is_selected():#如果这项没有被选择
i.click()#点击它
self.assertTrue(i.is_selected(),"selenium未被选中!")# 断言最后一项是否被选择
(12)警告框、弹出个确认框、弹出个输入框(Alert、Confirm、Prompt) 操作。
这三个元素共有以下五个操作语法。
driver.switchTo().alert()#获取alert
alert.accept()#点确定
alert.dismiss()#点取消
alert.text()#获取alert的内容
alert.send_key(keysToSend) #向Prompt发送文字
案例4-66:警告框操作。
def test_CheckAlert(self):
alertInformation="这是一个alert弹框"
self.driver.execute_script("alert('"+alertInformation+"')")
time.sleep(2)
#self.driver.switch_to_alert().accept() #相当于点击"确定"
#self.driver.switch_to_alert().dismiss() #相当于点击"取消"
text=self.driver.switch_to_alert().text #获取弹窗框里面的文字
self.assertEqual(text,alertInformation)
(13)Cookie操作。
Cookie共有以下五个操作语法。
get_cookies()#获得所有cookie
get_cookie(name)#返回字典key为name的cookie
add_cookie(cookie_dict)#添加cookie,cookie_dict为字典信息
delete_cookie(name,optionsString)#根据key为name删除cookies,optionsString支持路径、域
delete_all_cookies()#删除所有cookies
案例4-67:对csrftoken的操作。
附录A登录模块HTML代码如下。
<form class="form-signin" method="post" action="/login_action/" enctype="multipart/form-data">
<input type="hidden" name="csrfmiddlewaretoken" value="gNSK53BZIlPXK1wkRh6ZPeMIsCJOqTUtklfNsqxqnSEKrMoBUYoT2SWuo2Z4ouo3">
<h2 class="form-signin-heading">电子商务系统-登录</h2>
<p><label for="id_username">用户名:</label> <input type="text" name="username" maxlength="100" required id="id_username"></p>
<p><label for="id_password">密码 :</label> <input type="password" name="password" required id="id_password"></p>
<button class="btn btn-lg btn-primary btn-block" type="submit">登录</button><br>
<a href="\register\">注册</a>
</form>
为了破解csrftoken,需要获取name="csrfmiddlewaretoken" 隐藏文本框的内容,将其放入一个名为csrftoken的Cookies中。其Selenium测试代码如下。
def test_CheckLogin(self):
username='cindy'#定义用户名
password='123456'#定义密码
self.driver.find_element_by_id("id_username").clear()#清空并写入用户名
self.driver.find_element_by_id("id_username").send_keys(username)
self.driver.find_element_by_id("id_password").clear()#清空并写入密码
self.driver.find_element_by_id("id_password").send_keys(password)
csrftoken = self.driver.find_element_by_name("csrfmiddlewaretoken").get_attribute("value")#获取name="csrfmiddlewaretoken" 隐藏文本框的内容
self.driver.add_cookie({"name":"csrftoken","value":csrftoken})#将其放入一个名为csrftoken的Cookies中
self.driver.find_element_by_class_name("form-signin").submit()#进行登录操作
self.assertEqual(self.driver.title,"电子商务系统",msg="标题不正确")#验证登录知否成功
(14)文件上传。
这里仅对HTML为<input type="file">的文件介绍。
案例4-68:文件上传。
def test_CheckUpload (self):
file ="c:\\python\\song.txt"#上传文件路径
self.driver.find_element_by_name("upfile").send_keys(file)
time.sleep(4)
self.driver.find_element_by_id("submit").click()#提交表单
time.sleep(4)
self.assertIsNotNone("文件成功上载",self.driver.page_source)
(15)文件下载。
案例4-69:文件下载。
def setUp(self):
f = open("info.txt", "r")
brower = f.readline()
f.close()
if brower.lower() == "firefox":
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.dir', 'c:\\')
profile.set_preference('browser.download.folderList', 2)
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/rar’)
elif brower.lower() == "chrome":
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'c:\\'}
options.add_experimental_option('prefs', prefs)
else:
print("该浏览器不支持下载")
self.assertEqual(1,2)
d = drivers()
self.driver=d.driver
self.driver.implicitly_wait(5)
self.driver.get("http://127.0.0.1:8080/sec/37/index.html")
def test_Download(self):
self.driver.find_element_by_link_text('下载').click()
time.sleep(3)
这里Chrome与Firefox支持方式是不一样的,另外IE Selenium Webdriver是不支持下载的。
l 对于Chrome。
Ø browser.download.dir:指定下载路径。
Ø browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;#设置成 1 表下载到默认路径。
Ø browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器(没作用)。
Ø browser.helperApps.neverAsk.saveToDisk:对所给出文件类型不再弹出框进行询问。
l 对于Firefox。
Ø download.default_directory:设置下载路径。
Ø profile.default_content_settings.popups:设置为 0 禁止弹出窗口。
(17)对HTML5 Vedio的操作
对HTML5 Vedio的操作共有以下四个操作语法。
url = driver.execute_script("return argument[0].currentSrc",video) #获取视频的路径
driver.execute_script("return argument[0].load() ",video) #调用视频
driver.execute_script("return argument[0].play() ",video) #播放视频
driver.execute_script("return argument[0].pause() ",video) #暂停视频
案例4-70:HTML5 Vedio的操作。
以下测试程序将调用一段视频播放3秒钟后暂停5秒钟,然后继续播放。
class CheckVideo(unittest.TestCase):
def setUp(self):
d = drivers()
self.driver=d.driver
self.driver.implicitly_wait(5)
self.driver.get("http://127.0.0.1:8080/sec/16/index.htm")
def test_CheckVideo(self):
video= self.driver.find_element_by_id("video")#获取视频元素
print("start")
self.driver.execute_script("return arguments[0].play()",video)#播放视频
time.sleep(3)
print("pause")
self.driver.execute_script("return arguments[0].pause()",video)#暂停视频
time.sleep(5)
print("restart")
self.driver.execute_script("return arguments[0].play()",video)#继续播放视频