import unittest import time from selenium import webdriver class MailLogin(unittest.TestCase): def setUp(self): url = 'https://mail.yeah.net/' self.browser = webdriver.Chrome() self.browser.get(url) self.browser.implicitly_wait(3) # 用户名,密码为空 def test_login_01(self): # 我在正常用id定位按钮click事件不起作用,那么考虑是因为浏览器可能已经解析了网页的源码和webdriver源码执行不一致 # 可以用driver.page_source查看webdriver执行源码 # *代表所有的 '//*[@id="loginDiv"]'的意思就是查询id是loginDiv标签的第一个iframe标签 # //div[@id='login']/a 这个是div中id=login的标签下的a标签 # form下的id=login的input标签 //form[@id='login']/input # form下的id=login的input标签,多个form属性id=login //form[@id='login'][0]/input # table name='data' td class='row1' tr td class='row1' tr a 找a标签 //table[@name='data']/td[@class='row1'][1]/a elem = self.browser.find_element_by_xpath('//*[@id="loginDiv"]/iframe') self.browser.switch_to.frame(elem) # 这个标签里面要么是id,要么是name,要么是通过xpath找到控件实例 self.browser.find_element_by_name('email').send_keys('') self.browser.implicitly_wait(3) # 隐式等待 当控件预加载时,不超过3s就继续等待直到加载完成,如果超过3s,报错 self.browser.find_element_by_name('password').send_keys('') self.browser.implicitly_wait(3) self.browser.find_element_by_id('dologin').click() self.browser.implicitly_wait(3) def tearDown(self): print('teardown') if __name__ == '__main__': unittest.main()
下面我们对代码进行验证页面封装,这样的好处是只需要操作页面就可以,方便后续如果页面有变动,不会太影响代码的变动
import unittest import time from selenium import webdriver from elements.login import Login #邮箱自动化登录页面 class MailLogin(unittest.TestCase): def setUp(self): url = 'https://mail.yeah.net/' self.browser = webdriver.Chrome() self.browser.get(url) self.browser.implicitly_wait(3) self.login_page = Login(self.browser) def test_login_01(self): self.login_01('wangxue', '123', '帐号或密码错误') # 用户名,密码为空 def login_01(self, username, password, error_message): # 我在正常用id定位按钮click事件不起作用,那么考虑是因为浏览器可能已经解析了网页的源码和webdriver源码执行不一致 # 可以用driver.page_source查看webdriver执行源码 # *代表所有的 '//*[@id="loginDiv"]'的意思就是查询id是loginDiv标签的第一个iframe标签 # //div[@id='login']/a 这个是div中id=login的标签下的a标签 # form下的id=login的input标签 //form[@id='login']/input # form下的id=login的input标签,多个form属性id=login //form[@id='login'][0]/input # table name='data' td class='row1' tr td class='row1' tr a 找a标签 //table[@name='data']/td[@class='row1'][1]/a elem = self.browser.find_element_by_xpath('//*[@id="loginDiv"]/iframe') self.browser.switch_to.frame(elem) # 这个标签里面要么是id,要么是name,要么是通过xpath找到控件实例 self.login_page.name.send_keys(username) self.browser.implicitly_wait(3) # 隐式等待 当控件预加载时,不超过3s就继续等待直到加载完成,如果超过3s,报错 self.login_page.passwd.send_keys(password) self.browser.implicitly_wait(3) self.browser.find_element_by_id('dologin').click() self.browser.implicitly_wait(3) result = self.browser.find_element_by_xpath('//div[@id="nerror"]/div[2]').text self.assertEqual(result, error_message) def tearDown(self): print('teardown') if __name__ == '__main__': unittest.main()
#这个是封装配置控件页面 class Login(): by_name = 'email' by_id = 'password' driver = None def __init__(self, driver): self.driver = driver @property def name(self): return self.driver.find_element_by_name(self.by_name) @property def passwd(self): return self.driver.find_element_by_name(self.by_id)