zoukankan      html  css  js  c++  java
  • 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.0workspacexxdriverchromedriver.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.选择定位元素的方式也很重要
    '''
  • 相关阅读:
    HashMap和HashTable有什么不同?
    JAVA基础查漏补缺(面向面试场景)
    JAVA--GC 垃圾回收机制----可达性分析算法
    如何优雅的设计 Java 异常
    Java多线程之捕获子线程中的异常---面试经
    Review: the foundation of the transaction、Transaction characteristics in Spring
    用Demo 去理解Java Object 的 wait() 和 notify() 方法
    决心彻底认知 Integer 和 int 对象创建的原理
    java 基础复习 -用Demo去认识String 类
    java 基础复习 -用Demo去认识数组
  • 原文地址:https://www.cnblogs.com/fppblog/p/11137000.html
Copyright © 2011-2022 走看看