Selenium Webdriver API(9)
Selenium Webdriver API(9)
44、操作JavaScript的comfirm弹窗
#encoding=utf-8 import time import unittest from selenium import webdriver class visitLocalConfirmByIe(unittest.TestCase): def setUp(self): #启动浏览器 self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer") def test_HandleConfirm(self): #导入异常类 from selenium.common.exceptions import NoAlertPresentException url = "http://127.0.0.1:8080/test_confirm.html" #访问自定义网页 self.driver.get(url) #通过id属性值找到页面上的按钮元素 button = self.driver.find_element_by_id("button") #单击按钮元素,则会弹出一个confim提示框,上面显示“这是一个 confirm 弹出框”以及“确认”、“取消”按钮 button.click() try: #使用driver.switch_to.alert方法来获取alert对象 alert = self.driver.switch_to.alert time.sleep(2) #使用alert.text属性获取confirm框中的内容,关断言文字内容是否是“这是一个 confirm 弹出框” self.assertEqual(alert.text,u"这是一个 confirm 弹出框") #调用alert对象的accept()方法,模拟鼠标单击confirm弹窗上的“确认”按钮 ,以便关闭conform弹窗 alert.accept() #取消下一行代码的注释,就会模拟单击confirm弹窗上的“取消”按钮 # alert.dismiss() except NoAlertPresentException,e: #如果confirm框未弹出显示在页面上,则会抛出NoAlertPresentException异常 self.fail(u"尝试操作的confirm框未被找到") print e def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
45、操作JavaScript的prompt弹窗
#encoding=utf-8 import time import unittest from selenium import webdriver class visitLocalPromptByIe(unittest.TestCase): def setUp(self): #启动浏览器 self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer") def test_HandlePrompt(self): url = "http://127.0.0.1:8080/test_prompt.html" #访问自定义网页 self.driver.get(url) #使用id定位方式,找到页面上的按钮元素 button = self.driver.find_element_by_id("button") #单击按钮 button.click() time.sleep(2) #单击按钮元素后,弹出一介prompt提示框,上面将显示“这是一个 prompt 弹出框”、输入框、“确认”、“取消” #使用driver.switch_to.alert方法获取alert对象 alert = self.driver.switch_to.alert #使用alert.text方法获取prompt框上面的文字,并断言文字内容 是否和“这是一个 prompt 弹出框”一致 self.assertEqual(alert.text,u"这是一个 prompt 弹出框") time.sleep(1) #调用alert.send_keys()方法,在prompt窗体的输入框中输入“改变命运,从每天学习2小时开始” alert.send_keys(u"改变命运,从每天学习2小时开始") #使用alert对象的accept()方法点击“确定”按钮,关闭prompt框 alert.accept() #也可使用alert对象的dismiss()方法点击“取消”按钮,关闭prompt框 # alert.dismiss() def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
46、操作浏览器Cookie
#encoding=utf-8 import time import unittest from selenium import webdriver class visitSogouByIe(unittest.TestCase): def setUp(self): #启动浏览器 self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer") def test_Cookie(self): url = "http://www.sogou.com" #访问搜狗首页 self.driver.get(url) #得到当前页面下的所有Cookies,并输出他们所在域、name、value、有效期的路径 cookies = self.driver.get_cookies() for cookie in cookies: print "%s -->%s --> %s --> %s --> %s" % (cookie["domain"],cookie["name"],cookie["value"],cookie["expiry"],cookie["path"]) #根据Cookie的name值获取该条Cookie信息,获取 name值为“SUV”的Cookie信息 ck = self.driver.get_cookie("SUV") print "%s-->%s--> %s --> %s --> %s" % (ck["domain"],ck["name"],ck["value"],ck["expiry"],ck["path"]) #删除cookie有两种方法 #第一种:通过cookie的name属性,删除name值为“ABTEST”的Cookie信息 print self.driver.delete_cookie("ABTEST") #第二种:一次性删除全部Cookie信息 self.driver.delete_all_cookies() #删除全部Cookie后,再次查看Cookies,确认是否已被全部删除 cookies = self.driver.get_cookies() print cookies #添加自定义Cookie信息 self.driver.add_cookie({"name":"WOW","value":"12345678900"}) #查看添加的Cookie信息 cookie = self.driver.get_cookie("WOW") print cookie def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
练习:登录163邮箱
#encoding=utf-8 import time import unittest from selenium import webdriver from selenium.common.exceptions import TimeoutException class login163MailByIe(unittest.TestCase): def setUp(self): #启动浏览器 self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer") def test_login(self): url = "http://mail.163.com" #设置页面加载限制时间为4秒 self.driver.set_page_load_timeout(10) #窗口最大化 self.driver.maximize_window() try: stime = time.time() #访问163首页 self.driver.get(url) except TimeoutException,e: print u"页面加载超过设定时间,超时" #当页面加载时间超过设定时间,通过执行javascript来停止加载,然后继续执行后续动作 self.driver.execute_script("window.stop()") end = time.time() - stime print end #切换进iframe控件 # 目前126和163登录的iframe的id也是动态变化,所以不能用id定位iframe #使用各种xpath定位表达式,在浏览器中可以成功定位,但Pycharm中一直报错(NoSuchElementException),只成功过执行一次 iframe = self.driver.find_element_by_xpath('//iframe[contains(@id,"x-URS-iframe")]') self.driver.switch_to.frame(iframe) #获取用户名输入框 userName = self.driver.find_element_by_xpath("//input[@name='email']") # userName.click() userName.clear() userName.send_keys("chenyongliang_2013") #获取密码输入框 pwd = self.driver.find_element_by_xpath("//input[@name='password']") #输入密码 pwd.send_keys("xxx") #点击登录按钮 self.driver.find_element_by_id("dologin").click() time.sleep(5) #断言登录成功 self.assertTrue(u"退出" in self.driver.page_source) def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()