python+selenium实现web自动化


本文为博主原创文章,可以转载,但是转载时必须在文首注明原文链接。 https://www.cnblogs.com/fppblog/p/11137000.html 

 

 

以下代码实现的是自动点击系统菜单并校验返回结果:

# -*- coding: UTF-8 -*-
from selenium import webdriver
import time
import unittest
import requests


class LinghangTest(unittest.TestCase):

  #测试开始前登陆一次
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome(r"D:\IntelliJ IDEA 15.0\workspace\xx\driver\chromedriver.exe")
cls.driver.maximize_window()
cls.driver.implicitly_wait(30)
cls.base_url = "http://XXX.XXXXXX.com"
cls.verificationErrors = []
cls.accept_next_alert = True
cls.username = 'xxx'
cls.password = 'xxx'
  
  #测试结束后关闭网页
@classmethod
def tearDownClass(cls):

# cls.driver.refresh()
# cls.assertEqual([], cls.verificationErrors)
cls.driver.quit()

  #测试登录功能
def test_1Login(self):

driver = self.driver

driver.find_element_by_name("username").clear()
driver.find_element_by_name("username").send_keys(self.username)

driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys(self.password)

# driver.find_element_by_id("checkCode").clear()
# driver.find_element_by_id("checkCode").send_keys("123456")

driver.find_element_by_id('login_submit').click()
time.sleep(5)

driver.get(self.base_url)
resp = requests.get(self.base_url, timeout=5)
self.code = resp.status_code
print(self.driver.title)
print(self.code)
self.assertEqual(200, self.code, msg=None)
  
  #测试每个菜单点击后是否正常返回,三层菜单,逐个点击
def test_Customer(self):

     #先获取当前页面第一层菜单的个数,给循环使用
level0s = self.driver.find_elements_by_xpath('//*[@id="leftTreeNav"]/li')
print("num of level0: %d" % len(level0s))
for i in range(1, len(level0s)):
       #每次循环开始前需要再次获取当前页面第一层菜单,因为每次点击后页面元素会发生变化
level0s = self.driver.find_elements_by_xpath('//*[@id="leftTreeNav"]/li')
print("level00000: %s" % level0s[i].text)
level0s[i].click()

url = self.driver.current_url
print(u"获取当前页面url :%s" % url)
resp = requests.get(url, timeout=5)
self.code = resp.status_code
self.assertEqual(200, self.code, msg=None)

print("第一层----------------------------------------------------------------------------")
       #点击后获取当前页面的第二层菜单值,通过第一层菜单id定位
level0s = self.driver.find_elements_by_xpath('//*[@id="leftTreeNav"]/li')
level0id = level0s[i].get_attribute('id')
print("level0id: %s" % level0id)
level1s = self.driver.find_elements_by_xpath("//*[@id = '" + level0id + "']/ul/li")
time.sleep(3)
print("num of level0: %d" % len(level0s))
print("num of level1: %d" % len(level1s))
       #同理第一次循环
for j in range(0, len(level1s)):
level1s = self.driver.find_elements_by_xpath("//*[@id = '" + level0id + "']/ul/li")
print("level11111: %s" % level1s[j].text)
level1s[j].click()

url = self.driver.current_url
print(u"获取当前页面url :%s" % url)
resp = requests.get(url, timeout=5)
self.code = resp.status_code
self.assertEqual(200, self.code, msg=None)

level1s = self.driver.find_elements_by_xpath("//*[@id = '" + level0id + "']/ul/li")
level1id = level1s[j].get_attribute('id')
print("level1id: %s" % level1id)
level2s = self.driver.find_elements_by_xpath("//*[@id = '" + level1id + "']/ul/li")
time.sleep(3)
print("num of level2: %d" % len(level2s))

for p in range(0, len(level2s)):
level2s = self.driver.find_elements_by_xpath("//*[@id = '" + level1id + "']/ul/li")
print("level22222: %s" % level2s[p].text)
level2s[p].click()
time.sleep(3)

url = self.driver.current_url
print(u"获取当前页面url :%s" % url)
resp = requests.get(url, timeout=5)
self.code = resp.status_code
self.assertEqual(200, self.code, msg=None)

if __name__ == "__main__":
unittest.main()

'''注意事项:
1.每次点击后页面会刷新,在下次使用相同的元素时需要重新定位
2.选择定位元素的方式也很重要
'''


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM