#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common import keys
from selenium.webdriver.support import select
from selenium.common import exceptions
import unittest,time,re
class Baidu(unittest.TestCase):
    #setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。这里将浏览器的调用和URL的访问放到初始化部分。#
    def setUp(self): 
        self.driver=webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url='http://www.baidu.com/'
        self.verificationErrors=[]  #脚本运行时,错误的信息将被打印到这个列表中#
        self.accept_next_alert=True  #是否继续接受下一个警告#
    #百度搜索用例
    def test_baidu_serch(self):
        driver=self.driver
        driver.get(self.base_url)
        driver.find_element_by_id("kw").send_keys("selenium webdriver")
        driver.find_element_by_id("su").click()
        time.sleep(2)
        driver.quit()
    #百度设置用例
    def test_baidu_set(self):
        driver=self.driver
        #进入搜索设置页
        driver.get(self.base_url+'gaoji/preferences.html')  
        m=driver.find_element_by_name('NR') 
        #设置每页搜索结果为100条,先找到ID=NR的标签,再找到ID=NR标签下的option标签value值等于100的选择按钮
        m.find_element_by_xpath("//option[@value='100']").click()
        time.sleep(2)
        #保存设置的信息
        driver.find_element_by_xpath("//input[@value='保存设置']").click()
        time.sleep(2)
        n=driver.switch_to_alert()
        n.accept()
    def tearDown(self):
        self.driver.quit()
        self.assertEqual([],self.verificationErrors)
        '''
        tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。 
        self.assertEqual([], self.verificationErrors) 是个难点,
        对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。'''
if __name__=="__main__":
    unittest.main() #执行用例#

'''
执行结果如下:
Ran 2 tests in 30.719s  执行测试完所有测试用例,用了70.719S

ok 没有问题

如果你在用例中故意设置一个错误,例如:
百度设置用例中增加这样一行代码,查找到name为DR的标签,并单击它,因为这个是没有的,找不到这个标签,系统会报错,
driver.find_element_by_name('DR').click()
这时执行结果显示如下:
Ran 2 tests in 70.719s

FAILED (errors=1)
'''