最近工作不忙,开始学习python&selenium,有很多理解模糊的地方,做下记录,希望大神可以指导。
练习1:
小插曲1:执行代码以后,发现baidu.html空的,执行多次发现原因,必须关闭python执行窗口;
小疑问1:目前不太清楚方法close_alert_and_get_its_text,switch_to_alert;
错误1:执行多次偶尔会报错,还在琢磨:
error1:
ft1.3: Traceback (most recent call last):File "C:\learn_python\Á·Ï°\baidu.py", line 44, in test_baidu_logindriver.find_element_by_css_selector("#u1 > a[name=\"tj_login\"]").click()File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 376, in find_element_by_css_selectorreturn self.find_element(by=By.CSS_SELECTOR, value=css_selector)File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 664, in find_element{'using': by, 'value': value})['value']File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 175, in executeself.error_handler.check_response(response)File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 166, in check_responseraise exception_class(message, screen, stacktrace)
NoSuchElementException: Message: Unable to find element with css selector == #u1 > a[name="tj_login"]error2:
ft1.1: Traceback (most recent call last):File "C:\learn_python\Á·Ï°\baidu.py", line 21, in test_baidu_setdriver.find_element_by_css_selector("#u1 > a[name=\"tj_settingicon\"]").click()File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 376, in find_element_by_css_selectorreturn self.find_element(by=By.CSS_SELECTOR, value=css_selector)File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 664, in find_element{'using': by, 'value': value})['value']File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 175, in executeself.error_handler.check_response(response)File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 166, in check_responseraise exception_class(message, screen, stacktrace)
NoSuchElementException: Message: Unable to find element with css selector == #u1 > a[name="tj_settingicon"]
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException import unittest, time, re import HTMLTestRunner class Baidu(unittest.TestCase): def setUp(self): self.driver = webdriver.Ie() self.driver.implicitly_wait(30) self.base_url = "http://www.baidu.com" self.verificationErrors = [] self.accept_next_alert = True def test_baidu_set(self): u'测试百度设置' driver = self.driver driver.get(self.base_url + "/") driver.find_element_by_css_selector("#u1 > a[name=\"tj_settingicon\"]").click() time.sleep(2) driver.find_element_by_link_text("搜索设置").click() time.sleep(2) driver.find_element_by_link_text("保存设置").click() #self.assertEqual(u"已经记录下您的使用偏好", self.close_alert_and_get_its_text()) #driver.switch_to_alert().accept() def test_baidu_search(self): u'测试百度搜索' driver = self.driver driver.get(self.base_url + "/") driver.find_element_by_id("kw").clear() driver.find_element_by_id("kw").send_keys("selenium") driver.find_element_by_id("su").click() time.sleep(2) driver.close() #测试登陆 def test_baidu_login(self): u'测试登陆' driver = self.driver driver.get(self.base_url + "/") driver.find_element_by_css_selector("#u1 > a[name=\"tj_login\"]").click() driver.find_element_by_id("TANGRAM__PSP_8__userName").click() driver.find_element_by_id("TANGRAM__PSP_8__userName").clear() driver.find_element_by_id("TANGRAM__PSP_8__userName").send_keys("用户名") driver.find_element_by_id("TANGRAM__PSP_8__password").click() driver.find_element_by_id("TANGRAM__PSP_8__password").clear() driver.find_element_by_id("TANGRAM__PSP_8__password").send_keys("密码") driver.find_element_by_id("TANGRAM__PSP_8__submit").click() time.sleep(5) driver.find_element_by_link_text("退出").click() driver.find_element_by_link_text("确定").click() def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException, e: return False return True def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException, e: 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__": #定义一个单元测试容器 testunit=unittest.TestSuite() #添加测试用例:百度设置 testunit.addTest(Baidu("test_baidu_set")) #添加测试用例:百度搜索 testunit.addTest(Baidu("test_baidu_search")) #添加测试用例:百度登陆 testunit.addTest(Baidu("test_baidu_login")) #输出报告路径 filename=u'C:\\learn_python\\练习\\baidu.html' #打开报告,输入数据 fp=file(filename,'wb') #定义测试报告 runner = HTMLTestRunner.HTMLTestRunner( stream=fp, title=u'百度测试报告', description=u'用例执行情况:', ) runner.run(testunit)