精华内容
下载资源
问答
  • python自动化测试中,获取页面地址使用current_url()获取当前页面地址,但在原页面上点击按钮打开新页面,获取新页面地址使用current_url()获取到的地址还是原页面地址。 from selenium import webdriver import ...

    python自动化测试中,获取页面地址使用current_url()获取当前页面地址,但在原页面上点击按钮打开新页面,获取新页面地址使用current_url()获取到的地址还是原页面地址。

    from selenium import webdriver
    import time as t
    
    driver=webdriver.Chrome()
    driver.maximize_window()
    driver.implicitly_wait(30)
    driver.get('http:/www.baidu.com')
    # 跳转到新页面
    driver.find_element_by_link_text('新闻').click()
    t.sleep(3)
    print('当前浏览地址为:.{0}'.format(driver.current_url))
    driver.quit()
    

    运行结果如下:

    在这里插入图片描述

    添加定位页面代码之后再使用current_url获取地址即可。

    from selenium import webdriver
    import time as t
    
    driver=webdriver.Chrome()
    driver.maximize_window()
    driver.implicitly_wait(30)
    driver.get('http:/www.baidu.com')
    # 跳转到新页面
    driver.find_element_by_link_text('新闻').click()
    #切换当前页面标签
    driver.switch_to.window(driver.window_handles[1])
    t.sleep(3)
    print('当前浏览地址为:.{0}'.format(driver.current_url))
    driver.quit()
    

    运行结果如下:
    在这里插入图片描述

    展开全文
  • 一、web UI自动化测试 1.使用技术 python+pytest+po模式 2.测试点分析 2.1示例跳转大屏 a.点击跳转,新开窗口 b.点击按钮,是否有效 c.点击按钮跳转后,是否跳转到正确页面 2.2示例应用名称跳转 a.点击应用名称,...

    一、web UI自动化测试

    1.使用技术

    python+pytest+po模式

    2.测试点分析

    2.1示例跳转大屏

    在这里插入图片描述
    a.点击跳转,新开窗口
    b.点击按钮,是否有效
    c.点击按钮跳转后,是否跳转到正确页面

    2.2示例应用名称跳转

    在这里插入图片描述
    a.点击应用名称,当前页面跳转,不新增窗口
    b.点击应用名称,是否有效
    c.点击应用名称,是否跳转到正确页面
    d.点击应用名称,跳转显示的是否是此应用名称页面信息

    3.实现步骤

    3.1大屏跳转

     screen_btn=(By.XPATH,'//a[@href="#/ProjectIndex"]')  #元素定位
    
     def click_screen(self): #定义点击函数
            print("点击大屏按钮")
            WebDriverWait(self.driver, 20).until(EC.visibility_of_element_located(cml.screen_btn))
            self.driver.find_element(cml.screen_btn[0], cml.screen_btn[1]).click()
    
        # 测试用例--点击大屏
         def test_click_screen(self,init_loginWeb):
             logging.info("#########通用用例--点击大屏##########")
             # 1.调用登陆操作函数
             init_loginWeb[1].login(user,passwd,code)
             logging.info("登陆ok")
             # 去点击大屏
             init_loginWeb[2].click_screen()
             #断言大屏url 是否一致
             assert init_loginWeb[2].switch_screen_window() == screen_url  #正确页面url
    
    	#切换大屏窗口:判断窗口个数来验证点击大屏按钮是否成功
        #判断url 地址信息是否一致,判断是否正确
        def switch_screen_window(self):
            print("===切换大屏窗口===")
            # 获取当前窗口句柄
            cur_handle=self.driver.current_window_handle
            # 打印当前获取的窗口名称
            print(self.driver.title)
            # current_url 方法可以得到当前页面的URL
            print(self.driver.current_url)
            # 获取所有窗口句柄
            all_handles=self.driver.window_handles
            for handle in all_handles:
                if handle!=cur_handle:
                    # 切换窗口
                    self.driver.switch_to.window(handle)
                    #打印当前窗口title
                    print(self.driver.title)
                    print(self.driver.current_url)
                    screen_url=self.driver.current_url
                    # 返回主窗口
                    self.driver.switch_to.window(cur_handle)
            return screen_url
    

    3.2应用名称跳转

    safety_appName='//div[@class="cell el-tooltip"]//span'  #元素定位,值有多个,需用数组
        #定义函数-应用名称点击跳转
        def click_application_name(self,which): #which:代表元素定位到第几个数组值
            print("===首页-点击应用名称===")
            time.sleep(20) #WebDriverWait此处不适用
            self.driver.find_elements_by_xpath(IPL.application_name)[which].click()
    
    # 点击应用名称是否跳转
        def test_appname_jump(self,init_loginWeb):
            logging.info("#########首页--点击应用名称-跳转##########")
            # 1.调用登陆操作函数
            init_loginWeb[1].login(user,passwd,code)
            logging.info("登陆ok")
            # 2.点击应用名称
            init_loginWeb[3].click_application_name(0)
            # 3.断言是否跳转正确页面
            assert init_loginWeb[2].get_switch_menu_name(comm_menu[1])==cur_menu #正确页面菜单标题
    
        #获取菜单栏名称
        def get_switch_menu_name(self,menu_name):
            print("获取菜单栏名称")
            menu_locator=(cml.cur_menu[0],cml.cur_menu[1].format(menu_name))
            WebDriverWait(self.driver,20).until(EC.visibility_of_element_located(menu_locator))
            return self.driver.find_element(menu_locator[0],menu_locator[1]).text
    

    4.如何断言

    a.看页面的唯一特殊性
    b.采用最简单方便且通用灵活性的

    展开全文
  • 判断页面是否正确打开,依据(标题、url、页面关键字)三个元素进行判断 # 如果正常打开,返回True,否则,返回False def if_page_opened_success(self): act_page_title = self.driver.title act_page_url = ...
    # -*- encoding: utf-8 -*-
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions
    from selenium.webdriver.common.by import By
    class if_pageOpean_juage():
        url = None
        title = None
        keyword_xpath = None
        keyword_text = None
        open_timeout = 5
        def __init__(self, driver):
            self.driver = driver
        def open(self):
            self.driver.get(self.url)
        # 1. 判断页面是否正确打开,依据(标题、url、页面关键字)三个元素进行判断
        # 如果正常打开,返回True,否则,返回False
        def if_page_opened_success(self):
            act_page_title = self.driver.title
            act_page_url = self.driver.current_url
            # 1. 等待页面加载(动态的),等待页面出现指定关键字,如果没出现,返回False,对应信息
            try:
                WebDriverWait(self.driver, self.open_timeout).until(
                    expected_conditions.text_to_be_present_in_element((By.XPATH, self.keyword_xpath), self.keyword_text))
            except:
                return False, {"err_msg": "等待超时,指定页面元素(%s, %s)未找到" % (self.keyword_xpath, self.keyword_text)}
            failed_dic = {}
            if self.title != act_page_title:
                failed_dic['title'] = {"exp_value": self.title, "act_value": act_page_title}
            if self.url != act_page_url:
                failed_dic['url'] = {"exp_value": self.url, "act_value": act_page_url}
    
            if len(failed_dic.keys()) == 0:
                return True, {}
            else:
                return False, failed_dic
    

     

    展开全文
  • 但是,对于现在的网站,有些采用Local Storage来缓存当前加密的登录信息,这样的话,是无法通过cookie来操作的,所以我们需要得到缓存的已登录信息来实现绕过登录跳转到需要登录才能操作的页面。 废话不多说直接上...

    1、之前在网上看到,一些配置cookie来实现绕过登录的文章。但是,对于现在的网站,有些采用Local Storage来缓存当前加密的登录信息,这样的话,是无法通过cookie来操作的,所以我们需要得到缓存的已登录信息来实现绕过登录跳转到需要登录才能操作的页面。
    废话不多说直接上代码(代码有点粗糙,大家有意见可以随时提醒我):
    首先我们需要一个发送请求,获取登录token等信息的post请求:
    SendRquest .java

    	 /**
         * 向指定 URL 发送POST方法的请求
         * 
         * @param url
         *            发送请求的 URL
         * @param param
         *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
         * @return 所代表远程资源的响应结果
         */
        public static String sendPost(String url, String param) {
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                // 打开和URL之间的连接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的请求属性
                conn.setRequestProperty("Accept", "application/json, text/plain, */*");
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                conn.setRequestProperty("User-Agent",
                		"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36");
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 获取URLConnection对象对应的输出流
                out = new PrintWriter(conn.getOutputStream());
                out.print(param);
                // flush输出流的缓冲
                out.flush();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream(),"utf-8"));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送 POST 请求出现异常!"+e);
                e.printStackTrace();
            }
            //使用finally块来关闭输出流、输入流
            finally{
                try{
                    if(out!=null){
                        out.close();
                    }
                    if(in!=null){
                        in.close();
                    }
                }
                catch(IOException ex){
                    ex.printStackTrace();
                }
            }
            return result;
        }    
        /*测试是否请求成功!*/
    	public static void main(String[] args) {
    		String result = SendRquest.sendPost("https://test***.*****.cn/*****/index.php",DataStore.postParam);
    		//通过JSONObject解析JSON,得到webtoken的value
    		String webtoken = JSONObject.parseObject(JSONObject.parseObject(result).getString("data")).getString("webtoken"); 
    		System.out.println(webtoken);
    	}
    

    其次由于我的local Storage里的已登录信息的value是通过Base64加密的,所以我需要解密得到登录信息明文(解密这个大家百度就知道了,很多在线工具)
    这里我们需要将之前POST请求到的结果进行处理了:
    我们通过Base64ToStringUtil .java进行处理
    public class Base64ToStringUtil {

    public static void Base64toLogined(DriverBase driverBase) {
    	//post请求登陆状态,获得已登录状态的token等信息,通过Base64拼成浏览器Local Storage缓存区的userInfo的已登录状态字段信息
    	driverBase.get("https://test***.****.cn/");/*这个网址可以写你们首页网址就好了*/
    	String tokenOfLogined = "";
    	String postResult = SendRquest.sendPost(DataStore.loginRequestUrl,DataStore.postParam);
    	//通过JSONObject解析JSON,得到webtoken的value
    	String webtoken = JSONObject.parseObject(JSONObject.parseObject(postResult).getString("data")).getString("webtoken"); 
    	System.out.println(webtoken);
    	String requestValue = "{\"avatarurl\":\"https://testimage.comein.cn/comein-files/img/2018-08-29/dd5f3ae0-4bc4-447d-b425-e2c47014af47/dd5f3ae0-4bc4-447d-b425-e27.jpg\"";/*这里是不带登录的关键信息token的内容,我们写死就好了*/
    	String jsonVlaue = requestValue
    			+ "\"webtoken\":\""+webtoken+"\"},\"webtoken\":\""+webtoken+"\"}";
    	Base64 base64 = new Base64();
    	try {
    		tokenOfLogined = base64.encodeToString(jsonVlaue.getBytes("UTF-8"));
    	} catch (UnsupportedEncodingException e) {
    		Log.info("------------------登陆token信息转Base64失败----------------");
    		e.printStackTrace();
    	}
    	//添加userInfo和usersave的值至Local Storage缓存区
    	String userinfo="window.localStorage.setItem('userinfo',"+"'"+tokenOfLogined+"'"+")";
    	String usersave="window.localStorage.setItem('usersave','1')";
    	JavascriptExecutor jse = (JavascriptExecutor) driverBase.getDriver();
    	//调用方法执行JS代码
    	jse.executeScript(userinfo);
    	jse.executeScript(usersave);
    }
    }
    

    最后,我们直接在那你需要调用的地方直接调用该类,就可以实现绕过登录的功能了。有什么不太清楚的可以随时评论私聊我。

    展开全文
  •  而WebDriver测试执行时,偶然也会因此发生页面跳转或者加载的超时异常,而使得流程性的测试中断,给测试完整性和有效性带来很大的损失。其实这种问题很好解决,只需要重写或者封装一下GET方法来实现
  • 需求:现在有一个网站的页面,我希望用python自动化测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回到原始页面。 要完成这个需求就必须实现3点: 1. 找到原始...
  • 自动化测试中,有时需要验证页面跳转是否正常 1、选择appium实现,因为要填写appPcakage和appActivity,只能验证一个单独的APP,在自身APP上各个页面是否跳转正常 例如:焦点从APP中的【智能音箱】TAB移动到【历史...
  • python + selenium自动化测试--页面操作

    千次阅读 2017-12-27 14:52:07
    一般URL可以帮助我们判断跳转页面是否正确,或者URL中部分字段可以作为我们自动化测试脚本期待结果的一部分。print(driver.current_url)3、页面标题 获取当前页面标题.title # 获取当前页面标题显示的字段 p
  • 测试报告生成结果页面,点击左上角的图标不能快速返回到首页。在大神的指点下,要改一个跳转链接,如下图: 修改路径如下: 修改的字段:把<a href="#!" class="brand-logo blue darken-3">Extent<...
  • 和 5.5.23.1 正式环境下 无法打开自定义的自动化配置页面。 插件的Apilevel为 10010 此问题block新品上市,还请尽快排查解决 期望(必填) 正常打开自定义的自动化配置页面。 其他的上下文/日志/...
  • 微信小程序的自动化测试框架微信发布了小程序的自动化测试框架Minium,提供了多种运行验证方式,其特点:支持一套脚本,iOS & Android & 模拟器,三端运行提供丰富的页面跳转方式,看不到也能去得到可以获取...
  • 微信发布了小程序的自动化测试框架Minium,提供了多种运行验证方式,其特点:支持一套脚本,iOS & Android & 模拟器,三端运行提供丰富的页面跳转方式,看不到也能去得到可以获取和设置小程序页面数据,让...
  • web自动化测试视屏

    2017-10-26 12:49:25
     6.(第三层次)熟练掌握上面技巧之后,开始学习怎么将页面元素与代码分离,学习数据驱动(TestNG),以及怎么样结合Excel去做自动化测试。  7.(第四层次)学习持续集成的方法,怎么样将自动化测试更加“自动化...
  • 前提:手机有安装谷歌浏览器,能通过谷歌远程进行webview调试,进行页面元素的查找增加api:main url:用于每个用例都是同一个地方进行跳转测试;url:用于不同用例从不同网页地...
  • 上一节讲到了如何利用获得的元素来...前两个比较常用,可能会用到,比如说页面跳转后利用url来判断;页面的title也是一个检测的测试点。 接下来以百度贴吧页面来演示这几个常用方法 二、演示实例 from selenium import w
  • 微信小程序的自动化测试框架

    千次阅读 2020-01-21 13:17:04
    微信小程序的自动化测试框架 微信发布了小程序的自动化测试框架Minium,提供了多种运行验证方式,其特点: 支持一套脚本,iOS & Android & 模拟器,三端运行 提供丰富的页面跳转方式,看不到也能去得到 可以获取和...
  • 测试登录功能 # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui ...
  • iOS UI自动化测试详解

    2021-01-24 21:10:41
    在能够保证业务的足够稳定性的条件下,UI自动化测试能够节省很多回归功能的人力。这就是我的一个小目标。 测试需要全面,需要对结果去做判断。如果熟悉单元测试或接口自动化的朋友,应该知道这些其实就是功能覆盖、...
  • NO.4 项目使用的自动化测试框架NO.5 对库的使用NO.6 如何设计高质量自动化脚本NO.7 如何在脚本中组织测试用例,按什么模式设计NO.8 page object设置模式中,是否需要在page里定位的方法中加上断言NO.9 page object...
  • 上一节讲到了如何利用获得的元素来获取元素的信息,这次来说一下...当前浏览器名称page_source:当前html页面源码前两个比较常用,可能会用到,比如说页面跳转后利用url来判断;页面的title也是一个检测的测试点。接...
  • 主要包括,打开浏览器、关闭浏览器、浏览器前进,后退操作、隐式等待、关闭当前窗口、保存图片、重写定位元素、输入、清除文本框内容、点击元素、获取网页标题、重写send_keys方法、重写跳转iframe方法、切回父级...
  • 最近在学web自动化,记录一下学习过程。此处我选用python3.6+selenium3.0,均用最新版本,以适应未来需求。环境:windows10,64位一、安装pythonpython官方下载地址:https://www.python.org/downloads/进入页面就有...
  • 一、自动化测试简介 1. 自动化测试本质 通过自动化的形式来模拟人工一系列操作(面试可能会问,结合一个场景来回答) 打开项目->定位元素->操作元素->模拟页面动作->断言结果->生成报告 举例:云商...
  • 1.案例 https://blog.csdn.net/zhuyiquan/article/details/80148767 2.元素等待 ...3.元素定位时的页面跳转 https://blog.csdn.net/qq_20774073/article/details/80938181 ...
  • 自动化测试-Python2

    2020-07-18 22:43:25
    自动化测试之Python 功能7:层级定位 有多层框架定位 # 当有多层框架套用的时候的操作: from selenium import webdriver import time import os driver = webdriver.Chrome() file_path = 'file:///'+os.path....
  • 功能自动化测试 测试集合整体结构截图,测试铁路12306网站的注册页面的下拉列表,订票,订餐等功能 1、 验证下拉列表,验证铁路12306注册页面的下拉列表,用到verifySelectOptions命令来测试,下拉列表的内容能全部...
  • 1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。 2.PO层:元素定位、获得元素对象,页面动作 3.测试用例层:业务逻辑,数据驱动! 三者的关系:PO层继承继承层,测试用例层调用...
  • 需求:现在有一个网站的页面,我希望用python自动化测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回到原始页面。  要完成这个需求就必须实现3点:  1. 找到原始...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 279
精华内容 111
关键字:

自动化测试页面跳转