Selenium常用操作之单选复选框、下拉列表、键盘、截屏、断言、(显式隐式)等待
Selenium常用操作之单选复选框、下拉列表、键盘、截屏、断言、(显式隐式)等待
目录
1. 窗口最大化
2.单选框操作
3. 复选框操作
4. 下拉列表
5. selenium 三种等待
6. 键盘操作
7.截屏
8.断言
9. Selenium操作JS弹窗控件
10.鼠标悬停与释放
1. 窗口最大化
driver.maximize_window()
2.单选框操作
driver.find_element_by_xpath("//input[@value='berry']").click()
3. 复选框操作
berrCheckBox1 = driver.find_element_by_xpath('//input[@value="orange"]').click()
4. 下拉列表
driver.find_element_by_name("fruit").click()
time.sleep(2)
driver.find_element_by_id("watermelon").click()
5. selenium 三种等待
(1) 强制等待
常用于调试
import time
time.sleep(2)
(2) 隐式等待
简介:
a 、 driver.implicitly_wait(10),隐式等待设置了一个时间,在一段时间内网页是否加载完成,如果完成了,就进行下一步;在设置的时间内没有完成,则会报超时加载;
b、缺点是不智能,因为随着ajax技术的广泛应用,页面的元素往往都可以局部加载,也就是在整个页面没有加载完成的时候,可能我们需要的元素已经加载完成,那就没有必要在等待整个页面的加载,执行下一步,而隐式等待满足不了这一点; 另外一点,隐式等待的设置时全局性的,在开头设置过后,整个的程序运行过程中都会生效,都会等待页面加载完成,不需要每次都需要设置一遍。
你喜欢的水果
这是你爱吃的水果吗?
sogou 搜索
from selenium import webdriver
import time
# 导入异常 ,
# NoSuchElementException:找不到页面元素的异常
# TimeoutException:时间异常,超过规定时间,抛出异常
from selenium.common.exceptions import NoSuchElementException,TimeoutException
# 异常的获取与处理
import traceback
driver = webdriver.Chrome()
url = "http://www.sogou.com"
driver.get(url)
# 设置隐式等待
driver.implicitly_wait(10)
# 浏览器最大化
driver.maximize_window()
try:
searchBox = driver.find_element_by_id("query").send_keys("selenium")
click = driver.find_element_by_id("stb").click()
except(NoSuchElementException,TimeoutException):
traceback.print_exc()#获取异常
time.sleep(2)
driver.quit()
(3) 显式等待
简介:
selenium中的wait模块的WebDriverWait()方法,配合until或者until_not方法,在辅助一些判断条件,就可以构成这样一个场景:每经过多少秒就查看一次locator的元素是否可见,如果可见,就停止等待,如果不可见就继续等待直到超过规定的时间后,报超时异常;当然也可以判断某元素是否在规定时间内不可见等等的各种场景,需要根据自己实际的场景选择判断条件;
你喜欢的水果
请选择你喜欢的水果
桃子
西瓜
是否喜欢吃水果?
文本框
from selenium import webdriver
import time
from selenium.common.exceptions import NoSuchElementException,TimeoutException
import traceback
import os
#显式等待要用WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
#判断元素是否存在 expected_conditions as EC:取别名
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
url = 'file:///'+os.path.abspath("test.html")
driver.get(url)
try:
# 显示等待
wait = WebDriverWait(driver,10,0.2) #浏览器驱动,10:代表最长超时时间(秒),0.2:间隔刷新时间(不写,0.5刷新一次)
wait.until(EC.title_is("你喜欢的水果")) #判断标题是否等于 "你喜欢的水果"
print(u"当前网页的标题是:'你喜欢的水果'") # u utf-8 编码
#显示等待的另一种写法
element = WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//input[@value='Display alert box']"))
element.click()
time.sleep(2)
alert = wait.until(EC.alert_is_present())#判断有没有弹出 弹窗
print(alert.text) #如果打开了,打印当前文本值
time.sleep(2)
alert.accept() #点击接受
except TimeoutException as e:
print(traceback.print_exc())
except NoSuchElementException as e:
print(traceback.print_exc())
except Exception as e:
print(traceback.print_exc())
time.sleep(2)
driver.quit()
6. 键盘操作
(1) 获取并设置当前窗口位置
# 获取当前窗口的位置
posttion = driver.get_window_position()
print("初始值",posttion)
# 设置当前窗口位置
driver.set_window_position(x=120,y=120)
print("设置后",driver.get_window_position())
(2) 获取并设置当前窗口大小
# 设置当前窗口的大小
#设置新窗口大小,创建句柄,并取名为 'current'
driver.set_window_size(width="520",height="400",windowHandle='current')
print(driver.get_window_size(windowHandle='current'))
(3) 使用title属性识别和操作新弹出的浏览器窗口
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException,TimeoutException
# 导入期望场景类
from selenium.webdriver.support import expected_conditions as EC
# 导入BY类
from selenium.webdriver.common.by import By
#显式等待要用WebDriverWait
# 设置等待时间和超时时间
from selenium.webdriver.support.ui import WebDriverWait
# 导入堆栈类
import traceback
import time
# os.path子库以path为入口,用于操作和处理文件路径
import os
driver = webdriver.Chrome()
url= "file:///"+os.path.abspath("test.html")
driver.get(url)
# 显示等待找到页面上链接文字为“sougou搜索”的链接元素,找到后单击
# EC.element_to_be_clickable 判断是否被点击
WebDriverWait(driver,10,0.2).until(EC.element_to_be_clickable((By.LINK_TEXT,"sogou 搜索"))).click()
# 获取当前所有打开的浏览器窗口句柄
all_handles = driver.window_handles
# 打印当前浏览器窗口句柄
print(driver.current_window_handle)
# 打印打开的浏览器窗口的个数
print(len(all_handles))
time.sleep(2)
if len(all_handles)>0:
try:
for windouHandle in all_handles:
# 切换窗口
driver.switch_to.window(windouHandle)
print(driver.title)
#判断当前浏览器窗口的title窗口属性是否等于“搜狗搜索引擎 - 上网从搜狗开始”
if driver.title == "搜狗搜索引擎 - 上网从搜狗开始":
#显示等待页面搜索输入框加载完成,然后输入内容“sogou”首页的浏览器窗口被找到
WebDriverWait(driver,10,0.2).until(lambda x:x.find_element_by_id("query")).send_keys("sogou首页的浏览器窗口被找到")
time.sleep(2)
except NoSuchElementException as e:
print(traceback.print_exc())
except TimeoutException as e:
print(traceback.print_exc())
#将浏览器窗口切换到默认窗口
driver.switch_to.window(all_handles[0])
#打印切换回默认窗口的title
print(driver.title)
#断言当前浏览器窗口的title属性是“你喜欢的水果”
assert "你喜欢的水果" in driver.title
driver.quit()
(4)操作新弹出的浏览器窗口
你喜欢的水果
这是你爱吃的水果么
sogou 搜索
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException,TimeoutException
# 导入期望场景类
from selenium.webdriver.support import expected_conditions as EC
# 导入BY类
from selenium.webdriver.common.by import By
#显式等待要用WebDriverWait
# 设置等待时间和超时时间
from selenium.webdriver.support.ui import WebDriverWait
# 导入堆栈类
import traceback
import time
# os.path子库以path为入口,用于操作和处理文件路径
import os
driver = webdriver.Chrome()
url= "file:///"+os.path.abspath("test.html")
driver.get(url)
# 显示等待找到页面上链接文字为“sougou搜索”的链接元素,找到后单击
# EC.element_to_be_clickable 判断是否被点击
WebDriverWait(driver,10,0.2).until(EC.element_to_be_clickable((By.LINK_TEXT,"sogou 搜索"))).click()
# 获取当前所有打开的浏览器窗口句柄
all_handles = driver.window_handles
# 打印当前浏览器窗口句柄
print(driver.current_window_handle)
# 打印打开的浏览器窗口的个数
print(len(all_handles))
time.sleep(2)
if len(all_handles)>0:
try:
for windouHandle in all_handles:
# 切换窗口
driver.switch_to.window(windouHandle)
# elenium的page_source方法可以获取到页面源码
PageSource = driver.page_source
if "搜狗搜索" in PageSource:
WebDriverWait(driver,10,0.2).until(lambda x:x.find_element_by_id("query")).send_keys("找到了")
driver.find_element_by_id("stb").click()
time.sleep(3)
except NoSuchElementException as e:
print(traceback.print_exc())
except TimeoutException as e:
print(traceback.print_exc())
#将浏览器窗口切换到默认窗口
driver.switch_to.window(all_handles[0])
#打印切换回默认窗口的title
print(driver.title)
#断言当前浏览器窗口的title属性是“你喜欢的水果”
assert "你喜欢的水果" in driver.title
driver.quit()
7.截屏
import time
from selenium import webdriver
driver = webdriver.Chrome()
url = "http://www.jg.com"
driver.get(url)
try:
# 截屏
result = driver.get_screenshot_as_file(r"d:\test.png")
print(result)
except IOError as e:
print(e)
driver.quit()
8.断言
# 通过断言页面是否存在某些关键字来确定页面而按照预期加载
assert "selenium" in driver.page_source,"页面源码中不存在该关键字!"
9. Selenium操作JS弹窗控件
(1)提示弹窗
弹窗控件
你好,29快乐
还需要在努力呀
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
driver.maximize_window()
url="file:///"+os.path.abspath("index.html")
driver.get(url)
# 获取alert对话框
driver.find_element_by_xpath("/html/body/div/input[2]").click()
alert = driver.switch_to.alert #获取弹窗的方法
time.sleep(2)
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗
time.sleep(2)
driver.quit()
(2) 确认弹窗
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
driver.maximize_window()
url="file:///"+os.path.abspath("index.html")
driver.get(url)
# 获取alert对话框
driver.find_element_by_xpath("/html/body/div/input[3]").click()
alert = driver.switch_to.alert #获取弹窗的方法
time.sleep(2)
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗
time.sleep(2)
driver.find_element_by_xpath("/html/body/div/input[3]").click()
alert = driver.switch_to.alert #获取弹窗的方法
time.sleep(2)
print(alert.text)#打印对话框文本
alert.dismiss() #选择 "取消按钮"
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗
driver.quit()
(3)输入弹框
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
url = "file:///"+os.path.abspath("index.html")
driver.get(url)
# 获取prompt()输入对话框
driver.find_element_by_xpath("/html/body/div/input[1]").click()
# 获取警告对话框内的文本
prompt = driver.switch_to.alert
time.sleep(2)
# 打印取警告对话框内的文本
print(prompt.text)
# 在输入框内输入"努力"
prompt.send_keys("努力")
time.sleep(2)
# 点击确定按钮
prompt.accept()
# 获取警告框文本
prompt2 = driver.switch_to.alert
print(prompt2.text)
prompt2.dismiss()#取消按钮
driver.quit()
10.鼠标悬停与释放
鼠标释放
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
import os
driver = webdriver.Chrome()
url="file:///"+os.path.abspath("mouse_test.html")
driver.get(url)
div = driver.find_element_by_id("div1")
# 在id属性值为'div1'的元素上,执行按下的鼠标左键,并保持
ActionChains(driver).click_and_hold(div).perform()
time.sleep(2)
# 释放按下的鼠标左键
ActionChains(driver).release(div).perform()
time.sleep(2)
driver.quit()
鼠标悬停
from selenium import webdriver
#ActionChains 是自动化执行低级交互的一种方式,例如:鼠标移动,鼠标点按,键盘操作,文本操作等
from selenium.webdriver import ActionChains
import time
import os
driver = webdriver.Chrome()
url = "file:///"+os.path.abspath("test_001.html")
driver.get(url)
link1 = driver.find_element_by_link_text("鼠标指过来1")
link2 = driver.find_element_by_link_text("鼠标指过来2")
p= driver.find_element_by_xpath("//p")
ActionChains(driver).move_to_element(link1).perform()
time.sleep(2)
ActionChains(driver).move_to_element(p).perform()
time.sleep(2)
ActionChains(driver).move_to_element(link2).perform()
time.sleep(2)
ActionChains(driver).move_to_element(link1).perform()
time.sleep(2)
driver.quit()
以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了
各位想获取资料的朋友请 点赞 + 评论 + 收藏 ,三连!
三连 之后我会在评论区挨个私信发给你们~
你可能感兴趣的:(软件测试,selenium,selenium,测试工具)
Python selenium 库
AI老李
python python selenium 开发语言
关键要点PythonSelenium库用于自动化Web浏览器,适合测试和爬虫,中文教程资源丰富。推荐菜鸟教程、CSDN博客和Selenium-Python中文文档,涵盖基础到进阶。学习需注意浏览器驱动匹配和动态加载处理,可能需显式等待。资源推荐以下是适合初学者和中级学习者的中文教程:菜鸟教程:提供全面的Selenium教程,包括安装和示例,详见Selenium教程。Selenium-Python中
Python爬虫实战:基于最新技术的定时签到系统开发全解析
Python爬虫项目
2025年爬虫实战项目 python 爬虫 开发语言 人工智能 自动化 知识图谱
摘要本文详细介绍了如何使用Python开发一个功能完善的定时签到爬虫系统。文章从爬虫基础知识讲起,逐步深入到高级技巧,包括异步请求处理、浏览器自动化、验证码破解、分布式架构等最新技术。我们将通过一个完整的定时签到项目案例,展示如何构建一个稳定、高效且具有良好扩展性的爬虫系统。文中提供了大量可运行的代码示例,涵盖requests、aiohttp、selenium、playwright等多种技术方案,
20k软件测试工程师必会——Jenkins+Git+Appium 持续集成策略
测试小姐姐哟
软件测试 jenkins 运维
持续集成(Continuousintegration,简称CI)持续集成是一种开发实践,它倡导团队成员需要频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、自动化测试)来验证,从而尽快地发现集成中的错误。让正在开发的软件始终处于可工作状态,让产品可以快速迭代,同时还能保持高质量。Jenkins是基于Java开发的持续集成工具,开源免费,官网:https://jenkins.io/Ap
前端开发常见问题
技术文章大纲性能优化问题页面加载速度慢的常见原因及解决方案渲染阻塞资源的处理方法图片与媒体文件优化策略懒加载与代码分割的实现方式浏览器兼容性问题不同浏览器对CSS特性的支持差异JavaScriptAPI的兼容性处理方案Polyfill的使用场景与实现方法自动化测试工具在兼容性测试中的应用响应式设计挑战移动端与桌面端布局适配问题媒体查询的最佳实践方案视口单位与相对单位的正确使用高DPI屏幕的图像处理
京东大佬教你剖析软件测试的底层逻辑
程序员霄霄
软件测试 软件测试 功能测试 自动化 程序人生 职场和发展
写这篇文章,是希望把我的一些我认为是非常有价值的经验总结出来,能够帮助刚做测试不久的新同事,或者是测试经验丰富的老同事以共享。希望我们可爱的新同事,准备要在测试领域耕耘的伙伴,能够通过我的文章了解到测试的底层逻辑,也就是我们测试工作中可能看不到隐藏较深的点,而不只是日常所见的写用例、提bug、开发自动化、做平台。俗话说外行看热闹,内行看门道。我认为测试人员不应该成为PRD的搬运工,高级测试工程师也
Python桌面应用程序中的自动化测试
master_chenchengg
python python 办公效率 python开发 IT
Python桌面应用程序中的自动化测试一、自动化测试的魅力与Python的不解之缘为什么Python是自动化测试的首选?Python在桌面应用程序测试中的独特优势二、Python自动化测试工具箱:武装到牙齿Selenium与PyAutoGUI:双剑合璧的威力unittest与pytest:构建坚固的测试框架使用mock和fixture进行隔离测试三、实战演练:Python打造桌面应用自动化测试第一
selenium跳转到新页面时如何进行定位
在Selenium中,当你跳转到新页面(例如通过点击链接、提交表单或JavaScript重定向)时,通常会遇到页面加载或窗口切换的问题。为了在新页面上继续进行页面定位操作,你需要确保以下几点:✅1.等待页面加载完成Selenium默认不会自动等待页面加载完成。因此,你需要使用显式等待(ExplicitWait)来确保元素存在后再进行操作。示例代码(Python):fromseleniumimpor
最新最全软件测试- Linux面试题
linux面试题一、请写出如下功能Linux命令:1、三种查看server.log的文件内容linux查看日志文件内容命令tail、cat、tac、head、echo2、编辑start.sh文件,查看文件前10行内容和后10行内容vistart.shhead-n10start.sh前10行tail-n10start.sh后10行3、Linux使用命令可以查找到当前目录下所有txt文件且文件中包含h
【软件测试】- 软件测试面试题2
阿寻寻
大厂软件测试面试题 软件测试 测试工具
软件测试面试题**1.自我介绍(切记不要把简历上的内容复述一遍,尽可能把自己的优势展现出来)****2.做过哪些项目,介绍一下简历上的项目流程****3.在项目测试中有没有遇到比较严重的bug****4.黑盒测试,白盒测试的基本概念和区别****5.数据库了解吗?说说左连接,右链接,内连接****6.Mysql基本场景的简单语句****7.给你一个登录界面从哪方面入手设计测试用例?****8.熟悉
2024软件测试面试题-linux
好事花生了
程序人生 其他 功能测试 面试 经验分享 linux
1.linux和unix有哪些区别?Linux作为一个开源操作系统,具有更高的灵活性和可定制性,而Unix则更多地用于商业环境。无论是Unix还是Linux,它们都为用户提供了强大的功能和稳定的性能,满足了不同用户的需求。(1)开源性:Unix是一个封闭的商业操作系统,它使用的内核是专有的,只有少数人可以访问和修改其源代码。而Linux是一个开源操作系统,他的内核是免费开放的,任何人都可以自由地访
2024最新软件测试 Linux面试题【含答案】
心软小念
面试 软件测试面试 软件测试 linux 服务器 职场和发展 软件测试
六、Linux6.1Linux系统你是怎么用的?[在测试1、执行的过程中,我们发现的bug,有时候需要定位bug,协助开发修复bug时需要在linux里通过命令tail-200或tail-500查看当天的日志的后面多少行或者前面多少行定位bug或者通过tail-f来查看日志里的关键字exception(异常)error(错误)。[后台程序运行久了会对系统造成卡顿等诸多隐患或我们做性能测试的时候我们
Linux面试问题-软件测试
1、你在上一家公司常用的Linux命令有哪些?答:使用vim/vi编辑文件,使用cat,more,less,head查看文件,使用grep过滤日志中的error,使用ps查看进程,使用top查看实时进程,netstat查看端口,(df查看磁盘使用情况,du统计目录使用的大小,使用vmstat查看虚拟内存,使用free查看内存),还有一些其他比如使用scp拷贝文件,mv重命名,mkdir创建目录,r
UI自动化测试 - POM设计模式
什么鬼昵称
selenium 自动化 设计模式
一、介绍基于selenium的ui自动化测试核心上只要定位到元素,对元素执行相应的操作即可。例如下面的脚本代码:打开Chrome浏览器,在百度页面搜索自动化测试:fromseleniumimportwebdriverimporttimedriver=webdriver.chrome()driver.implicitly_wait(30)#打开浏览器,百度driver.get("http://www
XSStrike 进行 XSS 漏洞测试
XSStrike是一个功能强大的XSS漏洞测试工具,专为检测、验证和利用反射型、存储型、DOM型XSS漏洞而设计,适合配合手工测试,也可用于自动化发现。️1.安装XSStrike确保系统中有Python3和git:gitclonehttps://github.com/s0md3v/XSStrike.gitcdXSStrikepip3install-rrequirements.txt2.基本用法✅测
单元测试(超详细),一篇足矣
互联网杂货铺
职场和发展 python 自动化测试 软件测试 测试工具 单元测试 测试用例
点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快为什么我们需要测试?让产品可以快速迭代,同时还能保持高质量对于一些相对稳定的系统级别页面,自动化测试在提高测试的效率的方面起到非常重要的作用。前端的自动化测试主要包括:浏览器测试和单元测试。Vue官方脚手架自带自动化测试配置,并帮助你完成对组件,函数等的自动化测试。什么是持续集成?它和持续部署有什么区别?代码集成到主分支需要经过一系列的自
基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(3)使用dataProvider实现数据驱动用例执行
程序员的世界你不懂
UI自动化相关 java maven selenium
在测试一个系统的时候,通常需要对同一个模块的用例输入各种不一样的数据,验证实际结果是否达到了我们期望值,此时如果不对测试数据单独出来维护,会使得测试用例与测试数据的耦合度很高,难以维护,当后期我们想要提供一批新的测试数据,那么我们就得在测试用例中把所有的测试数据全都手动修改一遍,操作很繁琐,下面举个实际例子。我们现在想要测试百度输入框,想测试输入不同数据(手机号、人名、电影名、英文、特殊字符)等,
(七)自动化测试
我思故我在6789
测试大神之路 测试工具 可用性测试
1.简述什么是UI自动化测试?正确回答通过率:78.0%[详情]推荐指数:★★★★试题难度:中级UI自动化测试(UserInterfaceAutomationTesting)是一种通过编写脚本或使用自动化测试工具,对用户界面(UI)进行自动化测试的方法。它可以模拟用户与应用程序或网站的交互,自动化执行用户界面上的操作,如点击按钮、输入文本、选择选项等,并检查应用程序或网站的响应和行为是否符合预期。
Advanced REST Client (ARC) 项目贡献指南与技术架构解析
井章博Church
AdvancedRESTClient(ARC)项目贡献指南与技术架构解析arc-electronAdvancedRESTClient-Desktopapplication项目地址:https://gitcode.com/gh_mirrors/ar/arc-electron项目概述AdvancedRESTClient(ARC)是一个基于Electron构建的开源RESTAPI测试工具,它提供了直观的
鸿蒙next开发:性能测试工具SmartPerf Editor
代码与思维
鸿蒙 harmonyos 华为 嵌入式硬件 鸿蒙 驱动开发
SmartPerfEditor是一款PC端桌面应用,通过监测、采集应用运行时FPS、CPU、GPU、Memory、Battery、Network等性能数据,帮助开发者了解应用的性能状况。SmartPerfEditor还集成了DrawingDoc功能,可录制RenderService绘制指令,回放并生成不同图形库文件。通过逐帧逐绘制指令回放,来识别是否存在冗余绘制、是否可以优化绘制指令的数量,从而提
Python Selenium 使用指南
Selenium是一个用于自动化Web浏览器交互的强大工具,常用于网页测试、数据抓取和自动化任务。以下是Python中Selenium的详细使用说明。安装Selenium首先需要安装Selenium库和浏览器驱动:pipinstallselenium然后下载对应浏览器的驱动:Chrome:ChromeDriverFirefox:GeckoDriverEdge:EdgeDriver将驱动放在系统PA
单元测试详解
测试老哥
单元测试 测试工具 自动化测试 软件测试 python 测试用例 职场和发展
点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快一、什么是单元测试?单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类;单元测试属于最严格的软件测试手段,是最接近代码底层实现的验证手段,可以在软件开发的早期以最小的成本保证局部代码的质量。另外,单元测试都以自动化的方式执行,所以在大量回归测试的场景下执行单元测
接口自动化测试的总结与思考
测试老哥
python 软件测试 自动化测试 测试用例 职场和发展 接口测试 测试工具
点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快服务端接口测试介绍什么是服务端?一般所说的服务端是指为用户在APP或PC使用的互联网功能提供数据服务的背后的一切。以天猫精灵智能音箱系列的产品链路为例,服务端便是网关(包括网关在内)之后的链路。什么是接口?官方点说,是计算机系统中两个独立的部件进行信息交换的共享边界。通俗点说,就是服务端对外提供数据服务最常用的信息交换方式。提供数据服务的
最实用的selenium使用指南
selenium使用一环境搭建下载seleniumpipinstallselenium下载浏览器驱动(以Edge为例)在设置中找到当前Edge版本号,在[MicrosoftEdgeWebDriver-MicrosoftEdgeDeveloper](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)中下载对应版
Selenium使用指南
点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快Selenium是网页应用中最流行的自动化测试工具,可以用来做自动化测试或者浏览器爬虫等。官网地址为:相对于另外一款web自动化测试工具QTP来说有如下优点:免费开源轻量级,不同语言只需要一个体积很小的依赖包支持多种系统,包括Windows,Mac,Linux支持多种浏览器,包括Chrome,FireFox,IE,safari,opera
Python爬虫实战:利用Selenium与反反爬技术高效爬取天眼查企业信息
Python爬虫项目
2025年爬虫实战项目 python 爬虫 开发语言 scrapy selenium
摘要本文将详细介绍如何使用Python爬虫技术获取天眼查的企业信息数据。我们将从爬虫基础开始,逐步深入到高级反反爬技术,最终构建一个能够稳定获取天眼查数据的爬虫系统。文章包含完整的代码实现、技术原理分析以及实际应用场景,帮助读者全面掌握企业信息爬取的核心技术。关键词:Python爬虫、天眼查、Selenium、反反爬技术、企业信息采集、数据挖掘一、引言在当今大数据时代,企业信息数据对于市场分析、商
软件测试入门到精通-第9周-接口自动化测试-fixture实现测试控制+集成allure
蓝花楹下
软件测试入门到精通 python 功能测试
《Pytest跳过测试的艺术:让测试用例学会"偷懒"的正确姿势》幽默指南核心原理:测试界的"请假条"系统想偷懒批准条件批准测试用例举手申请HR审批(@pytest.mark)带薪休假skip弹性办公skipif提交证明文件技术剧场:两幕喜剧第一幕:《霸道测试不想跑》
[email protected] (reason="今天心情不好")#测试届的"姨妈假"deftest_imp
软件测试系列--白盒测试覆盖率的问题
测试届老纪
软件测试 职场和发展 软件测试
覆盖率##一、覆盖率的概念###覆盖率是用来度量测试完整性的一个手段,现在有越来越多的测试工具能够支持覆盖率测试,但是它们本身并不包含测试技术,只是测试技术有效性的一个度量。白盒测试中经常用到的覆盖率是逻辑覆盖率。二、覆盖率的目的###覆盖率对于软件测试有着非常重要的作用,通过覆盖率我们可以知道我们的测试是否充分,我们测试的弱点在哪些方面,进而指导我们设计能够增加覆盖率的测试用例,有效的提高测试质
软件测试(功能、接口、性能、自动化)详解 | 测试人生路
一、软件测试功能测试测试用例编写是软件测试的基本技能;也有很多人认为测试用例是软件测试的核心;软件测试中最重要的是设计和生成有效的测试用例;测试用例是测试工作的指导,是软件测试的必须遵守的准则。黑盒测试常见测试用例编写方法1、等价类选取少数有代表性的数据,这一类数据等价于这一类的其它值;找出最小的子集,可以发现最多的错误;特性:必须设计的用例;涵盖了大部分情况;2、边界值所谓边界条件,是指输入和输
软件测试-修正判定条件覆盖(MCDC)的一些认识
鲸 Blue
软件测试 软件测试 职场和发展
修正判定条件覆盖(ModifiedCondition/DecisionCoverage即MC/DC)通过参照上图,我们首先从宏观的角度上理解MCDC在软件测试中的分支。软件测试软件工程开发中中必不可少且非常重要的一部分,软件测试从是否执行代码来看可分为两种测试方法:静态测试和动态测试.静态测试是指不用执行程序的测试,它主要采取方案——代码走查、技术评审、代码审查的方法对软件产品进行测试,通俗来说就
Android开发、adb、monkey测试
别走!万哥爱你
软件测试干货 测试工具
一、手机测试概念传统手机测试VS手机应用软件测试传统手机测试:指测试手机本身比如抗压,抗摔,抗疲劳,抗低温高温等。也包括手机本身功能、性能等测试。手机应用软件测试C/SClient/Server手机应用软件是基于手机操作系统之上开发出来的软件,做这样的测试就叫做手机应用软件测试。二、手机端常规测试2.1.What2.1.1.介绍手机测试的概念架构对于手机端测试,按照平台来分,分为Android和I
Linux的Initrd机制
被触发
linux
Linux 的 initrd 技术是一个非常普遍使用的机制,linux2.6 内核的 initrd 的文件格式由原来的文件系统镜像文件转变成了 cpio 格式,变化不仅反映在文件格式上, linux 内核对这两种格式的 initrd 的处理有着截然的不同。本文首先介绍了什么是 initrd 技术,然后分别介绍了 Linux2.4 内核和 2.6 内核的 initrd 的处理流程。最后通过对 Lin
maven本地仓库路径修改
bitcarter
maven
默认maven本地仓库路径:C:\Users\Administrator\.m2
修改maven本地仓库路径方法:
1.打开E:\maven\apache-maven-2.2.1\conf\settings.xml
2.找到
 
XSD和XML中的命名空间
darrenzhu
xml xsd schema namespace 命名空间
http://www.360doc.com/content/12/0418/10/9437165_204585479.shtml
http://blog.csdn.net/wanghuan203/article/details/9203621
http://blog.csdn.net/wanghuan203/article/details/9204337
http://www.cn
Java 求素数运算
周凡杨
java 算法 素数
网络上对求素数之解数不胜数,我在此总结归纳一下,同时对一些编码,加以改进,效率有成倍热提高。
第一种:
原理: 6N(+-)1法 任何一个自然数,总可以表示成为如下的形式之一: 6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…)
java 单例模式
g21121
java
想必单例模式大家都不会陌生,有如下两种方式来实现单例模式:
class Singleton {
private static Singleton instance=new Singleton();
private Singleton(){}
static Singleton getInstance() {
return instance;
}
Linux下Mysql源码安装
510888780
mysql
1.假设已经有mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz
(1)创建mysql的安装目录及数据库存放目录
解压缩下载的源码包,目录结构,特殊指定的目录除外:
32位和64位操作系统
墙头上一根草
32位和64位操作系统
32位和64位操作系统是指:CPU一次处理数据的能力是32位还是64位。现在市场上的CPU一般都是64位的,但是这些CPU并不是真正意义上的64 位CPU,里面依然保留了大部分32位的技术,只是进行了部分64位的改进。32位和64位的区别还涉及了内存的寻址方面,32位系统的最大寻址空间是2 的32次方= 4294967296(bit)= 4(GB)左右,而64位系统的最大寻址空间的寻址空间则达到了
我的spring学习笔记10-轻量级_Spring框架
aijuans
Spring 3
一、问题提问:
→ 请简单介绍一下什么是轻量级?
轻量级(Leightweight)是相对于一些重量级的容器来说的,比如Spring的核心是一个轻量级的容器,Spring的核心包在文件容量上只有不到1M大小,使用Spring核心包所需要的资源也是很少的,您甚至可以在小型设备中使用Spring。
 
mongodb 环境搭建及简单CURD
antlove
Web Install curd NoSQL mongo
一 搭建mongodb环境
1. 在mongo官网下载mongodb
2. 在本地创建目录 "D:\Program Files\mongodb-win32-i386-2.6.4\data\db"
3. 运行mongodb服务 [mongod.exe --dbpath "D:\Program Files\mongodb-win32-i386-2.6.4\data\
数据字典和动态视图
百合不是茶
oracle 数据字典 动态视图 系统和对象权限
数据字典(data dictionary)是 Oracle 数据库的一个重要组成部分,这是一组用于记录数据库信息的只读(read-only)表。随着数据库的启动而启动,数据库关闭时数据字典也关闭 数据字典中包含
数据库中所有方案对象(schema object)的定义(包括表,视图,索引,簇,同义词,序列,过程,函数,包,触发器等等)
数据库为一
多线程编程一般规则
bijian1013
java thread 多线程 java多线程
如果两个工两个以上的线程都修改一个对象,那么把执行修改的方法定义为被同步的,如果对象更新影响到只读方法,那么只读方法也要定义成同步的。
不要滥用同步。如果在一个对象内的不同的方法访问的不是同一个数据,就不要将方法设置为synchronized的。
将文件或目录拷贝到另一个Linux系统的命令scp
bijian1013
linux unix scp
一.功能说明 scp就是security copy,用于将文件或者目录从一个Linux系统拷贝到另一个Linux系统下。scp传输数据用的是SSH协议,保证了数据传输的安全,其格式如下: scp 远程用户名@IP地址:文件的绝对路径
【持久化框架MyBatis3五】MyBatis3一对多关联查询
bit1129
Mybatis3
以教员和课程为例介绍一对多关联关系,在这里认为一个教员可以叫多门课程,而一门课程只有1个教员教,这种关系在实际中不太常见,通过教员和课程是多对多的关系。
示例数据:
地址表:
CREATE TABLE ADDRESSES
(
ADDR_ID INT(11) NOT NULL AUTO_INCREMENT,
STREET VAR
cookie状态判断引发的查找问题
bitcarter
form cgi
先说一下我们的业务背景:
1.前台将图片和文本通过form表单提交到后台,图片我们都做了base64的编码,并且前台图片进行了压缩
2.form中action是一个cgi服务
3.后台cgi服务同时供PC,H5,APP
4.后台cgi中调用公共的cookie状态判断方法(公共的,大家都用,几年了没有问题)
问题:(折腾两天。。。。)
1.PC端cgi服务正常调用,cookie判断没
通过Nginx,Tomcat访问日志(access log)记录请求耗时
ronin47
一、Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间
nginx.conf使用配置方式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_r
java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。
bylijinnan
java
public class ProbabilityOfDice {
/**
* Q67 n个骰子的点数
* 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。
* 在以下求解过程中,我们把骰子看作是有序的。
* 例如当n=2时,我们认为(1,2)和(2,1)是两种不同的情况
*/
private stati
看别人的博客,觉得心情很好
Cb123456
博客 心情
以为写博客,就是总结,就和日记一样吧,同时也在督促自己。今天看了好长时间博客:
职业规划:
http://www.iteye.com/blogs/subjects/zhiyeguihua
android学习:
1.http://byandby.i
[JWFD开源工作流]尝试用原生代码引擎实现循环反馈拓扑分析
comsci
工作流
我们已经不满足于仅仅跳跃一次,通过对引擎的升级,今天我测试了一下循环反馈模式,大概跑了200圈,引擎报一个溢出错误
在一个流程图的结束节点中嵌入一段方程,每次引擎运行到这个节点的时候,通过实时编译器GM模块,计算这个方程,计算结果与预设值进行比较,符合条件则跳跃到开始节点,继续新一轮拓扑分析,直到遇到
JS常用的事件及方法
cwqcwqmax9
js
事件 描述
onactivate 当对象设置为活动元素时触发。
onafterupdate 当成功更新数据源对象中的关联对象后在数据绑定对象上触发。
onbeforeactivate 对象要被设置为当前元素前立即触发。
onbeforecut 当选中区从文档中删除之前在源对象触发。
onbeforedeactivate 在 activeElement 从当前对象变为父文档其它对象之前立即
正则表达式验证日期格式
dashuaifu
正则表达式 IT其它 java其它
正则表达式验证日期格式
function isDate(d){
var v = d.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/i);
if(!v) {
this.focus();
return false;
}
}
<input value="2000-8-8" onblu
Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证
dcj3sjt126com
yii
public array rules () {return} array 要调用 validate() 时应用的有效性规则。 返回属性的有效性规则。声明验证规则,应重写此方法。 每个规则是数组具有以下结构:array('attribute list', 'validator name', 'on'=>'scenario name', ...validation
UITextAttributeTextColor = deprecated in iOS 7.0
dcj3sjt126com
ios
In this lesson we used the key "UITextAttributeTextColor" to change the color of the UINavigationBar appearance to white. This prompts a warning "first deprecated in iOS 7.0."
Ins
判断一个数是质数的几种方法
EmmaZhao
Math python
质数也叫素数,是只能被1和它本身整除的正整数,最小的质数是2,目前发现的最大的质数是p=2^57885161-1【注1】。
判断一个数是质数的最简单的方法如下:
def isPrime1(n):
for i in range(2, n):
if n % i == 0:
return False
return True
但是在上面的方法中有一些冗余的计算,所以
SpringSecurity工作原理小解读
坏我一锅粥
SpringSecurity
SecurityContextPersistenceFilter
ConcurrentSessionFilter
WebAsyncManagerIntegrationFilter
HeaderWriterFilter
CsrfFilter
LogoutFilter
Use
JS实现自适应宽度的Tag切换
ini
JavaScript html Web css html5
效果体验:http://hovertree.com/texiao/js/3.htm
该效果使用纯JavaScript代码,实现TAB页切换效果,TAB标签根据内容自适应宽度,点击TAB标签切换内容页。
HTML文件代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
Hbase Rest API : 数据查询
kane_xie
REST hbase
hbase(hadoop)是用java编写的,有些语言(例如python)能够对它提供良好的支持,但也有很多语言使用起来并不是那么方便,比如c#只能通过thrift访问。Rest就能很好的解决这个问题。Hbase的org.apache.hadoop.hbase.rest包提供了rest接口,它内嵌了jetty作为servlet容器。
启动命令:./bin/hbase rest s
JQuery实现鼠标拖动元素移动位置(源码+注释)
明子健
jquery js 源码 拖动 鼠标
欢迎讨论指正!
print.html代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>发票打印</title>
&l
Postgresql 连表更新字段语法 update
qifeifei
PostgreSQL
下面这段sql本来目的是想更新条件下的数据,可是这段sql却更新了整个表的数据。sql如下:
UPDATE tops_visa.visa_order
SET op_audit_abort_pass_date = now()
FROM
tops_visa.visa_order as t1
INNER JOIN tops_visa.visa_visitor as t2
ON t1.
将redis,memcache结合使用的方案?
tcrct
redis cache
公司架构上使用了阿里云的服务,由于阿里的kvstore收费相当高,打算自建,自建后就需要自己维护,所以就有了一个想法,针对kvstore(redis)及ocs(memcache)的特点,想自己开发一个cache层,将需要用到list,set,map等redis方法的继续使用redis来完成,将整条记录放在memcache下,即findbyid,save等时就memcache,其它就对应使用redi
开发中遇到的诡异的bug
wudixiaotie
bug
今天我们服务器组遇到个问题:
我们的服务是从Kafka里面取出数据,然后把offset存储到ssdb中,每个topic和partition都对应ssdb中不同的key,服务启动之后,每次kafka数据更新我们这边收到消息,然后存储之后就发现ssdb的值偶尔是-2,这就奇怪了,最开始我们是在代码中打印存储的日志,发现没什么问题,后来去查看ssdb的日志,才发现里面每次set的时候都会对同一个key