【Web自动化测试——代码篇】常用方法——切换

2023-11-17

方法总览

多表单切换

当一个页面存在frame/iframe表单嵌套时,WebDriver却只能在一个页面上对元素识别定位,但是对于表单上的嵌套元素无法直接定位,这时候该怎么办呢?

Java

 1 package JavaTest;
 2 
 3 import java.util.NoSuchElementException;
 4 import java.util.concurrent.TimeUnit;
 5 import org.openqa.selenium.By;
 6 import org.openqa.selenium.Keys;
 7 import org.openqa.selenium.WebDriver;
 8 import org.openqa.selenium.firefox.FirefoxDriver;
 9 import org.openqa.selenium.interactions.Actions;
10 import org.openqa.selenium.support.ui.ExpectedConditions;
11 import org.openqa.selenium.support.ui.WebDriverWait;
12 
13 public class Test {
14     public static void main(String[] arg) throws InterruptedException
15     {
16         WebDriver driver = new FirefoxDriver();
17 
18          // 设置隐示等待时长:10秒;
19         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
20         driver.get("file:///C:/Users/%E6%9B%B9%E5%B8%85/Desktop/iframe.html");    
21         
22         try {
23             // 切换到id为frame1的frame
24             driver.switchTo().frame("frame1");
25             
26             // 接下来获取frame1中百度元素
27             driver.findElement(By.id("kw")).sendKeys("Java");
28             driver.findElement(By.id("su")).click();
29             
30             //跳回最外层页面
31             driver.switchTo().defaultContent();
32 
33              // 通过元素定位frame2
34             driver.switchTo().frame(driver.findElement(By.id("frame2")));
35             driver.findElement(By.id("translateContent")).sendKeys("Java");
36         }
37         catch(NoSuchElementException e)
38         {
39             System.out.println(e.getMessage());
40         }
41         finally
42         {
43             driver.close();
44         }    
45     }
46 }

Python

 1 from selenium import webdriver
 2 from selenium.webdriver.common.by import By
 3 from time import *
 4 
 5 # 启动Firefox浏览器
 6 driver = webdriver.Firefox()
 7 
 8 # 隐式等待10S,打开网址(可直接通过frame的id和name定位)
 9 driver.implicitly_wait(10)
10 driver.get("file:///C:/Users/%E6%9B%B9%E5%B8%85/Desktop/iframe.html")
11 
12 try:
13     # 切换到id为frame1的frame
14     driver.switch_to.frame("frame1")
15 
16     # 接下来获取frame1中百度元素
17     driver.find_element(By.ID, 'kw').send_keys('Python')
18     driver.find_element(By.ID, 'su').click()
19 
20     # driver.switch_to.default_content() 跳回最外层页面
21     # 跳出当前一级表单
22     driver.switch_to.parent_frame()
23 
24     # 通过元素定位frame2
25     element = driver.find_element(By.ID, 'frame2')
26     driver.switch_to.frame(element)
27     driver.find_element(By.ID, 'translateContent').send_keys('Python')
28 except Exception as e:
29     print(e.args[0])
30 finally:
31     driver.close()

Ruby

 1 class Baidu
 2   require 'rubygems'
 3   require 'selenium-webdriver'
 4 
 5   # 打开firefox并输入网址
 6   driver = Selenium::WebDriver.for :firefox
 7 
 8   # 设置隐式等待时间10S
 9   driver.manage.timeouts.implicit_wait = 10
10   driver.navigate.to "file:///C:/Users/%E6%9B%B9%E5%B8%85/Desktop/iframe.html"
11 
12   begin
13     # 切换到id为frame1的frame
14     driver.switch_to.frame('frame1')
15 
16     # 接下来获取frame1中百度元素
17     driver.find_element(:id => 'kw').send_keys('Ruby')
18     driver.find_element(:id => 'su').click
19 
20     # 跳出当前一级表单
21     driver.switch_to.parent_frame
22 
23     # 通过元素定位frame2
24     driver.switch_to.frame(driver.find_element(:id => "frame2"))
25     driver.find_element(:id => 'translateContent').send_keys('Ruby')
26   rescue => e
27     puts e.message # 显示报错信息
28   ensure
29     driver.close
30   end
31 end

多窗体切换

当我们点击某个链接时,弹出了新的窗体,这时候我们要在不同的窗体上进行操作又该怎么切换呢?

Java

 1 package JavaTest;
 2 
 3 import java.util.ArrayList;
 4 import java.util.NoSuchElementException;
 5 import java.util.Set;
 6 import java.util.concurrent.TimeUnit;
 7 import org.openqa.selenium.By;
 8 import org.openqa.selenium.WebDriver;
 9 import org.openqa.selenium.firefox.FirefoxDriver;
10 
11 public class Test {
12     public static void main(String[] arg) throws InterruptedException
13     {
14         WebDriver driver = new FirefoxDriver();
15 
16          // 设置隐示等待时长:10秒;
17         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
18         driver.get("http://www.baidu.com");    
19         
20         try {
21             driver.findElement(By.xpath("//*[@id='u1']/a[7]")).click(); // 点击百度登录按钮
22             driver.findElement(By.xpath("//*[@id='passport-login-pop-dialog']/div/div/div/div[4]/a")).click(); // 进入注册页面
23             driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_10__footerULoginBtn']")).click(); //点击用户登陆
24             driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_10__submitWrapper']/a[1]")).click(); //进入忘记密码页面
25 
26             // 获取当前所有打开的窗口的句柄
27             Set<String> winHandels = driver.getWindowHandles();
28             ArrayList<String> windows = new ArrayList<String>(winHandels);
29 
30             driver.switchTo().window(windows.get(2)); // 切换到注册页面
31             System.out.println(driver.getCurrentUrl());
32             driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_3__userName']")).sendKeys("1234567890"); //输入设置用户名
33             driver.close(); //关闭注册页面
34             driver.switchTo().window(windows.get(0)); //切换到主页
35             driver.close(); //关闭主页
36             driver.switchTo().window(windows.get(1));//切换到忘记密码页面
37         }
38         catch(NoSuchElementException e)
39         {
40             System.out.println(e.getMessage());
41         }
42         finally
43         {
44             driver.close();
45         }    
46     }
47 }

Python

 1 from selenium import webdriver
 2 from selenium.webdriver.common.by import By
 3 
 4 # 启动Firefox浏览器
 5 driver = webdriver.Firefox()
 6 
 7 # 隐式等待10S,打开网址(可直接通过frame的id和name定位)
 8 driver.implicitly_wait(10)
 9 driver.get("http://www.baidu.com")
10 
11 try:
12     driver.find_element(By.XPATH, "//*[@id='u1']/a[7]").click()  # 点击百度登录按钮
13     driver.find_element(By.XPATH, "//*[@id='passport-login-pop-dialog']/div/div/div/div[4]/a").click() # 进入注册页面
14     driver.find_element(By.XPATH, "//*[@id='TANGRAM__PSP_10__footerULoginBtn']").click() # 点击用户登陆
15     driver.find_element(By.XPATH, "//*[@id='TANGRAM__PSP_10__submitWrapper']/a[1]").click()  # 进入忘记密码页面
16 
17     # 获取当前所有打开的窗口的句柄
18     windows = driver.window_handles
19 
20     driver.switch_to.window(windows[-1]) # 切换到注册页面
21     driver.find_element(By.XPATH, "//*[@id='TANGRAM__PSP_3__userName']").send_keys('1234567890') # 输入设置用户名
22     driver.close() # 关闭注册窗体
23     driver.switch_to.window(windows[0])  # 切换到主页
24     driver.close()  # 关闭主页
25     driver.switch_to.window(windows[1]) # 切换到忘记密码页面
26 except Exception as e:
27     print(e.args[0])
28 finally:
29     driver.close()

Ruby

 1 class Baidu
 2   require 'rubygems'
 3   require 'selenium-webdriver'
 4 
 5   # 打开firefox并输入网址
 6   driver = Selenium::WebDriver.for :firefox
 7 
 8   # 设置隐式等待时间10S
 9   driver.manage.timeouts.implicit_wait = 10
10   driver.navigate.to "http://www.baidu.com"
11 
12   begin
13     driver.find_element(:xpath => "//*[@id='u1']/a[7]").click   # 点击百度登录按钮
14     driver.find_element(:xpath => "//*[@id='passport-login-pop-dialog']/div/div/div/div[4]/a").click # 进入注册页面
15     driver.find_element(:xpath => "//*[@id='TANGRAM__PSP_10__footerULoginBtn']").click  # 点击用户登陆
16     driver.find_element(:xpath => "//*[@id='TANGRAM__PSP_10__submitWrapper']/a[1]").click   # 进入忘记密码页面
17 
18     # 获取当前所有打开的窗口的句柄
19     windows = driver.window_handles
20 
21     driver.switch_to.window(windows[-1]) # 切换到注册页面(2/-1)
22     driver.find_element(:xpath => "//*[@id='TANGRAM__PSP_3__userName']").send_keys('1234567890') # 输入设置用户名
23     driver.close  # 关闭注册窗体
24     driver.switch_to.window(windows[0]) # 切换到注册页面
25     driver.close  # 关闭主页
26     driver.switch_to.window(windows[1]) # 切换到忘记密码页面
27   rescue => e
28     puts e.message # 显示报错信息
29   ensure
30     driver.close
31   end
32 end

警告框

为什么要把警告框放在这里呢?我们把页面想象成一个画布,我们在当前的画布层进行操作,弹出的警告框就像是画布的顶层。我们要切换到“画布”顶层将其处理才可进行后续操作。

Java

package JavaTest;

import java.util.NoSuchElementException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Test {
    public static void main(String[] arg) throws InterruptedException
    {
        WebDriver driver = new FirefoxDriver();

         // 设置隐示等待时长:10秒;
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("file:///C:/Users/%E6%9B%B9%E5%B8%85/Desktop/alert.html");

        try {
            driver.findElement(By.xpath("//*[@id='btn']")).click();//点击"点我一下"按钮
            driver.switchTo().alert().accept();;//接受现有警告框
        }
        catch(NoSuchElementException e)
        {
            System.out.println(e.getMessage());
        }
        finally
        {
            driver.close();
        }
    }
}

Python

问题一:

采用代码:driver.switch_to.alert().accept() # 接受现有警告框
报错提示:‘Alert’ object is not callable
解决方法:
对象不能用函数形式调用,就是不能callable。
更换代码:driver.switch_to_alert().accept() # 接受现有警告框

问题二:

try:
    driver.find_element(By.XPATH, "//*[@id='btn']").click()  # 点击"点我一下"按钮
    print(driver.switch_to_alert().text) # 接受现有警告框
except Exception as e:
    print(e.args[0])
finally:
    driver.close()


解决方法:
driver.close()用来关闭当前窗体,driver.quit()用来退出相关驱动程序和关闭所有窗口。
目前我们仍然处于alert,close()无法适用。要么先将alert进行接受处理后用close()方法,要么直接采用quit()退出驱动。

1 from selenium import webdriver
 2 from selenium.webdriver.common.by import By
 3 
 4 # 启动Firefox浏览器
 5 driver = webdriver.Firefox()
 6 
 7 # 隐式等待10S,打开网址(可直接通过frame的id和name定位)
 8 driver.implicitly_wait(10)
 9 driver.get("file:///C:/Users/%E6%9B%B9%E5%B8%85/Desktop/alert.html")
10 
11 try:
12     driver.find_element(By.XPATH, "//*[@id='btn']").click()  # 点击"点我一下"按钮
13     driver.switch_to_alert().accept() # 接受现有警告框
14 except Exception as e:
15     print(e.args[0])
16 finally:
17     driver.quit() 

Ruby

 1 class Baidu
 2   require 'rubygems'
 3   require 'selenium-webdriver'
 4 
 5   # 打开firefox并输入网址
 6   driver = Selenium::WebDriver.for :firefox
 7 
 8   # 设置隐式等待时间10S
 9   driver.manage.timeouts.implicit_wait = 10
10   driver.navigate.to "file:///C:/Users/%E6%9B%B9%E5%B8%85/Desktop/alert.html"
11 
12   begin
13     driver.find_element(:xpath => "//*[@id='btn']").click   # 点击"点我一下"按钮
14     puts driver.switch_to.alert.text # 显示警告框文本
15     driver.switch_to.alert.accept # 接受现有警告框
16   rescue => e
17     puts e.message # 显示报错信息
18   ensure
19     driver.close
20   end
21 end

最后:下方这份完整的【软件测试】视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Web自动化测试——代码篇】常用方法——切换 的相关文章

  • 步骤详图 教你在linux搭建容器环境

    警告 切勿在没有配置 Docker YUM 源的情况下直接使用 yum 命令安装 Docker 1 准备工作 系统要求 要安装Docker CE 社区版 操作系统的最低要求是CentOS7 7以下版本都不被支持 卸载旧版本 Docker改版
  • 测试开发必知:有Tomcat,为什么还要Nginx?

    只用Tomcat 不用Nginx搭建Web服务 行不行 我曾经提出的愚蠢问题 今天详细给自己解释下 为什么必须用Nginx 不用Nginx 只用Tomcat的Http请求流程 浏览器处理一个Http请求时 会首先通过DNS服务器找到域名关联
  • 微信小程序的自动化测试框架

    微信发布了小程序的自动化测试框架Minium 提供了多种运行验证方式 其特点 支持一套脚本 iOS Android 模拟器 三端运行 提供丰富的页面跳转方式 看不到也能去得到 可以获取和设置小程序页面数据 让测试不止点点点 可以直接触发小程
  • 基于Loadrunner的性能分析及调优经验分享

    公司某个系统的微信端计划将开放给几百上千的人员登录查询 并且登录账号为同一账号多人使用 后台服务能够支撑起多用户的并发操作以及成百上千人登录微信端对生产数据库或者登录查询的性能效率高成为交付可靠生产环境的必要条件 因此 项目组决定提交测试
  • 新入职一个00后卷王,每天加班到2点,太让人崩溃了····

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • 软件测试|Pydantic详细介绍与基础入门

    简介 Pydantic 是一个强大的 Python 库 用于数据验证和解析 特别是用于处理 JSON 数据 它的主要目标是使数据验证和解析变得简单 直观和可维护 本文将介绍 Pydantic 的基础知识 包括如何定义模型 验证数据以及处理错
  • 软件测试|SQLAlchemy环境安装与基础使用

    简介 SQLAlchemy 是一个强大的 Python 库 用于与关系型数据库进行交互 它提供了高度抽象的对象关系映射 ORM 工具 允许使用 Python 对象来操作数据库 而不必编写原生SQL查询 本文将介绍如何安装 SQLAlchem
  • 软件测试|Selenium StaleElementReferenceException 异常分析与解决

    简介 Selenium 是一个流行的自动化测试工具 用于模拟用户与网页交互 然而 当我们在使用 Selenium 时 可能会遇到一个常见的异常 即 StaleElementReferenceException 这个异常通常在我们尝试与网页上
  • 软件测试|pycharm关联GitHub的详细步骤

    简介 GitHub 是全球最大的开源代码托管平台之一 而 PyCharm 是一款强大的 Python 集成开发环境 将两者结合使用 可以提高团队协作和代码管理的效率 本文将详细介绍如何在 PyCharm 中管理 GitHub 账号 包括如何
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 软件测试|如何使用selenium处理iframe富文本输入框

    简介 在网页开发中 富文本框是常见的元素 用于输入富文本内容 如富文本编辑器或邮件编辑器 如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框 可能会遇到一些挑战 本文将详细介绍如何使用Python和Selenium
  • Jmeter 性能-阶梯负载最终请求数

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 摸爬滚打多年的打工人,总结了三条职场真理,绝不假大空!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 开眼了,自动化测试还能这样用?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 甜蜜而简洁 —— 深入了解Pytest插件pytest-sugar

    在日常的软件开发中 测试是确保代码质量的关键步骤之一 然而 对于测试报告的生成和测试结果的可读性 一直以来都是开发者关注的焦点 Pytest插件 pytest sugar 以其清晰而美观的输出 为我们提供了一种愉悦的测试体验 本文将深入介绍
  • 2024拒绝行业内卷!八年软件测试20K*16薪行业心得 想入行必看

    目前工作做软件测试工作8年 属于高级测试员那个级别吧 现在看到各行各业的人都在转行学习软件测试 想给大家一些学习建议和忠告 很多粉丝都跟我说今年行情很差 找不到工资 真的找不到工作了吗 我们常在网上看到的 程序员饱和 程序员过剩 其实一般是
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • Web自动化测试 —— cookie复用

    一 cookie简介 cookie是一些数据 存储于用户电脑的文本文件中 当web服务器想浏览器发送web页面时 在链接关闭后 服务端不会记录用户信息 二 为什么要使用Cookie自动化登录 复用浏览器仍然在每次用例开始都需要人为介入 若用
  • 软件测试面试:还没有自动化测试项目经验,3个项目帮你走入软测职场!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自

随机推荐

  • 计算机如何根据人脸估计年龄,人脸图像算法研究(1)

    今天给大家带来一篇 人脸识别中的年龄估计技术 年龄特征作为人类的一种重要生物特征 计算机要如何基于人脸图像估计年龄呢 概述 简单地说 基于人脸图像的年龄估计是指机器根据面部图像推测出人的大概年龄或所属的年龄范围 年龄段 基于人脸图像的年龄估
  • 4.4.5 密码验证(2)

    4 当且仅当含数字和字母的密码验证 如果密码当且仅当包含数字和字母 那么该密码的强度是中等强度 当然 它的安全性一般 以下正则表达式能够验证当且仅当包含数字和字母的密码 da zA Z d a zA Z da zA Z 74 正则表达式 7
  • C++ 的四种类型转换

    背景 C语言中强制类型转换可以随意转换我们想要的类型 格式如下 类型 变量名 那么为什么C 还要引入新的4种类型转换呢 1 新的类型转换控制符可以很好的控制类型转换的过程 允许控制各种类型不同的转换 2 C 的类型转换控制服能告诉程序员或读
  • 【毕业设计】Python_学生校园消费行为

    资源下载 https download csdn net download wouderw 87357462 1 分析学校校园消费行为的目的 分析学生的消费行为和食堂的运营状况 为食堂运营提供建议 构建学生消费细分模型 为学校判定学生的经济
  • VT是什么?怎么打开教程

    装过虚拟机的朋友都知道 要想虚拟出cpu 就必须电脑打开VT VT指的是CPU的虚拟化技术 有了它就可以单CPU模拟多CPU并行 这样才可以虚拟出电脑出来 而如果你的bios没有打开VT的话 是不能创建虚拟机的 下面就教大家怎么打开VT 1
  • 华为员工自曝,工作四年,每天都哭想裸辞!

    架构师大咖 架构师大咖 打造有价值的架构师交流平台 分享架构师干货 教程 课程 资讯 架构师大咖 每日推送 公众号 该公众号已被封禁 进入华为是一项令人向往的机会 但它并不适合每个人 许多人都希望能够进入这家公司 但实际上 它要求员工具备卓
  • 加权回归估计_比率估计与回归估计

    本章讨论简单随机抽样和分层随机抽样下比率估计和回归估 计的构造及性质 要求 掌握总体比率 比率估计量及回归估计量的概念 了解比率估计量 回归估计量的偏倚 方差及方差的估计量 掌握应用比率估计量及回归估计量的条件 抽样调查从本质上看是利用不完
  • 蓝桥杯:拉马车

    目录 题目描述 输入描述 输入为 2 行 2 个串 分别表示 A B 双方初始手里的牌序列 我们约定 输入的串的长度不超过 30 输入输出样例 输入 输出 题目分析 列表 递归 AC代码 Java 题目描述 小的时候 你玩过纸牌游戏吗 有一
  • Linux最基础

    软件包安装的时候 会经常用到 tar zxvf Japan tar gz 如果要做LAMP环境的编译 建立一个LAMP源代码包构建的PHP生产环境 下载的包都是 tar gz 这样的源代码包 创建目录 mkdir 创建文件 touch 命令
  • Apache Commons Compress介绍-Zip压缩解压

    Apache Commons Compress介绍 Zip压缩解压 简述 为什么使用Apache Commons Compress 在使用java自带的ZipFile处理zip文件时报如下错误java lang IllegalArgumen
  • 安装virtualbox时安装程序出现严重错误

    问题 windows 8 1 下virtualbox安装到一半跳出错误窗口被迫终止 窗口如下 virtualbox install fail https img blog csdn net 20160622163138051 解决方法 在服
  • 从头走前端-百度前端技术学院(1)

    记录自己在网上自学加复习的前端笔记 当然还有一些其他涉及的相关知识 问题 在web建站技术中 HTML HTML5 XHTML CSS JavaScript PHP SQL web services是什么 答 首先知道网站的访问过程 1 输
  • navicat 绿化版

    navicat自带注册码 已经绿化 解压到任意目录就可运行 Navicat Premium 是一个可多重连接的数据库管理工具 它可让你以单一程序同时连接到 MySQL Oracle PostgreSQL SQLite 及 SQL Serve
  • 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型 常见的IO模型有四种 1 同步阻塞IO Blocking IO 即传统的IO模型 2 同步非阻塞IO Non blocking IO 默认创建的socket都是阻塞的 非阻塞IO
  • Python retrying模块

    参见 http segmentfault com a 1190000004085023 github源码 https github com rholder retrying
  • QT信号槽连接方式

    1 QT信号槽主要分两个连接方式 手动和自动 1 1 使用 connect 函数手动连接信号和槽 QObject connect sender SIGNAL signal receiver SLOT slot 自动 1 2 使用 lambd
  • 模板类与函数

    模板类与函数 普通函数 参数和返回值是模板类的实例化版本 函数模板 参数和返回值是某种的模板类 函数模板 参数和返回值是任意类型 支持普通类和模板类和其它类型 模板类可以用于函数的参数和返回值 有三种形式 普通函数 参数和返回值是模板类的实
  • 运用Cookie技术,统计访问次数以及上次访问时间。

    package servlet import java io IOException import java io PrintWriter import java text SimpleDateFormat import java util
  • mysql已经配置且正确_mysql8 参考手册-Connector/J应用程序进行故障排除-1

    16 1 当我尝试使用MySQL Connector J连接到数据库时 出现以下异常 SQLException Server configuration denies access to data source SQLState 08001
  • 【Web自动化测试——代码篇】常用方法——切换

    方法总览 多表单切换 当一个页面存在frame iframe表单嵌套时 WebDriver却只能在一个页面上对元素识别定位 但是对于表单上的嵌套元素无法直接定位 这时候该怎么办呢 Java 1 package JavaTest 2 3 im