后台服务器(java)——api接口(桥梁,适配)——requests
web自动化原理:
浏览器 ——selenium(webdriver)——python代码 selenium
webdriver提供的接口api模式
selenium 怎么和webdriver交互?通过http请求。通过python代码向webdriver发送http请求。
不同的driver相当于和浏览器之间的翻译。
面试题:selenium采用的是什么协议?http协议
进行web自动化测试的原因:
1.显示的数据不一定是后端返回的数据
2.兼容性
3.UI交互
标记性语言:
HTML:超文本标记语言,Hyper Text Markup language 方便查找,快速定位
采用键值对的形式:<key>value</key> key是指定的标签,规范,标准
XML <key>value</key> key是自定义的标签
markdown
标记性语言只是负责结构化的展示,不负责美化和动态。css和js怎么可以放在html里面的,html发展支持了这样的扩展进行导入。就像python里可以加载c一样
HTML:radio 单选 checkbox默认选中 readonly只对输入框生效只读 默认为true。 disabled不能使用
readonly和disabled的区别:readonly只针对input(text/password)和textarea有效。而disabled对于所有的表单元素都有效,包括select,redio,checkbox,button等。表单在使用了disabled后,要将表单以post或get方式提交的话,这个元素的值不会被传递出去。而readonly会将会将值传递出去。
JavaScript:
<Script>
var a=1;
function run(){
IF (a>8){
console.log("我最棒")
return a+8;
}
else if (a<4){
return a;
}
}
run();
</Script>
DOM: Document Object Mode 文档对象模型。 把文本映射成一个dom对象。就是把HTML中的各种元素映射成js可以访问的对象。1.查找元素2.修改元素3.操作浏览器
ID name classname tagname querySelector
文档中的所有元素都可以看做节点。documen代表整个文档。documen.getElementById("") document.querySelector, document.querySelectorAll
element.textContent.
DOM修改:
innerHTML:可以修改所有
innerText:可以修改整个元素的id等属性
value:element.value("kkjjhd")
setAttribute:element.setAttribute('id','hello')
getAttribute("maxlength") 可以获取可以修改
改变样式style,color
改变 disabled,readonly
事件监听:
onchange html元素改变
onclik 用户点击html元素
onmouseover 用户从一个html元素上移动鼠标
onmouseout 用户从一个html元素上移开鼠标
onkeydown 用户按下键盘按键
onload 浏览器已完成页面的加载
1.前进 driver.forward()
2.刷新:driver.refresh()
3.设置窗口大小:driver.set_window_size(400,300)
4.最大化:driver.maximize_window()
5.最小化:driver.minimize_window()
6.后退:driver.back()
7.获取截图:driver.save_screenshot(‘demo.png’)
8.关闭 :driver.close()
9.退出:driver.quit()
查看源码;ctrl+B 查看详细源码 ctrl+shift+i
self.service = Service(
executable_path,
port=port,
service_args=service_args,
log_path=service_log_path)
self.service.start()
start方法:
try:
cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdout=self.log_file,
stderr=self.log_file,
stdin=PIPE)
except TypeError:
raise
webdriver原理:
1.初始化一个service并且启动这个service
start()方法:主题逻辑,通过命令行的——subprocess.Popen形式打开chromedriver.exe文件 ,也就是放在python根目录下的驱动
2.初始化一个ChromeRemoteConnection连接器,通过execute方法urllib3库进行网络请求。请求上面的service服务器。来访问了service_url也就是service中的一个属性。定义了一些谷歌特有的接口地址。接口地址全部封装在chromedriver.exe中。只有执行self.execute方法才是调用请求。
commands中有很多URL地址,封装各种各样的方法,get访问服务器,find-element找元素。所有方法做的事情都是execute访问了subprocess也就是url地址。

command_executor=ChromeRemoteConnection(
remote_server_addr=self.service.service_url,
keep_alive=keep_alive),
desired_capabilities=desired_capabilities)
class ChromeRemoteConnection(RemoteConnection):
def __init__(self, remote_server_addr, keep_alive=True):
RemoteConnection.__init__(self, remote_server_addr, keep_alive)
self._commands["launchApp"] = ('POST', '/session/$sessionId/chromium/launch_app')
self._commands["setNetworkConditions"] = ('POST', '/session/$sessionId/chromium/network_conditions')
self._commands["getNetworkConditions"] = ('GET', '/session/$sessionId/chromium/network_conditions')
self._commands['executeCdpCommand'] = ('POST', '/session/$sessionId/goog/cdp/execute')
通过python标准库 urllib3来访问服务器的地址。requests通过 urllib3来实现的。只是封装了requests
execute方法:执行请求的方法。

本文深入探讨Selenium与WebDriver的工作原理及应用,介绍如何通过HTTP协议实现自动化测试,涵盖元素定位、DOM操作、浏览器控制等关键技术。同时,解析JavaScript、HTML、CSS在Web自动化测试中的角色。
1394

被折叠的 条评论
为什么被折叠?



