当前位置: 首页 > news >正文

怎么建立网站网址pc端软件界面设计

怎么建立网站网址,pc端软件界面设计,wordpress下载弹窗,百度怎么发帖做推广最近在看一些底层的东西。driver翻译过来是驱动#xff0c;司机的意思。如果将webdriver比做成司机#xff0c;竟然非常恰当。 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车。在开出租车时有三个角色#xff1a; 乘客#xff1a;他/她告诉出租车司机去哪里司机的意思。如果将webdriver比做成司机竟然非常恰当。 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车。在开出租车时有三个角色 · 乘客他/她告诉出租车司机去哪里大概怎么走。 · 出租车司机他按照乘客的要求来操控出租车。 · 出租车出租车按照司机的操控完成真正的行驶把乘客送到目的地。 在WebDriver中也有类似的三个角色 · 自动化测试代码自动化测试代码发送请求给浏览器的驱动比如火狐驱动、谷歌驱动。 · 浏览器的驱动它来解析这些自动化测试的代码解析后把它们发送给浏览器。 · 浏览器执行浏览器驱动发来的指令并最终完成工程师想要的操作。 所以在这个类比中 · 工程师写的自动化测试代码就相当于是乘客。 · 浏览器的驱动就相当于是出租车司机。 · 浏览器就相当于是出租车。 下面再从技术上解释下WebDriver的工作原理 从技术上讲也同样是上面的三个角色 · WebDriver API基于Java、Python、C#等语言。 · 对于java语言来说就是下载下来的selenium的Jar包比如selenium-java-3.8.1.zip包代表Selenium3.8.1的版本。 · 浏览器的驱动browser driver每个浏览器都有自己的驱动均以exe文件形式存在。比如谷歌的chromedriver.exe、火狐的geckodriver.exe、IE的IEDriverServer.exe浏览器。 浏览器当然就是我们很熟悉的常用的各种浏览器。那在WebDriver脚本运行的时候它们之间是如何通信的呢为什么同一个browser driver即可以处理java语言的脚本也可以处理python语言的脚本呢让我们来看一下一条Selenium脚本执行时后端都发生了哪些事情 · 对于每一条Selenium脚本一个http请求会被创建并且发送给浏览器的驱动。 · 浏览器驱动中包含了一个HTTP Server用来接收这些http请求。 · HTTP Server接收到请求后根据请求来具体操控对应的浏览器。 浏览器执行具体的测试步骤 浏览器将步骤执行结果返回给HTTP Server。HTTP Server又将结果返回给Selenium的脚本如果是错误的http代码我们就会在控制台看到对应的报错信息。 为什么使用HTTP协议呢 因为HTTP协议是一个浏览器和Web服务器之间通信的标准协议而几乎每一种编程语言都提供了丰富的http libraries这样就可以方便的处理客户端Client和服务器Server之间的请求request及响应responseWebDriver的结构中就是典型的C/S结构WebDriver API相当于是客户端而小小的浏览器驱动才是服务器端。 WebDriver基于的协议JSON Wire protocol。 JSON Wire protocol是在http协议基础上对http请求及响应的body部分的数据的进一步规范。 我们知道在HTTP请求及响应中常常包括以下几个部分http请求方法、http请求及响应内容body、http响应状态码等。 常见的http请求方法 GET用来从服务器获取信息。比如获取网页的标题信息。 POST向服务器发送操作请求。比如findElementClick等。 http响应状态码 在WebDriver中为了给用户以更明确的反馈信息提供了更细化的http响应状态码比如 7NoSuchElement 11ElementNotVisible 200Everything OK 现在到了最关键的http请求及响应的body部分了 body部分主要传送具体的数据在WebDriver中这些数据都是以JSON的形式存在并进行传送的这就是JSON Wire protocol。 Selenium 是将各个浏览器的API封装成 Selenium自己设计定义的协议名字叫做The WebDriver Wire Protocol 的webdriver API 操作层面 1、测试人员编写UI自动化测试脚本java,python等等运行脚本后程序会打开指定的webdriver浏览器。 webdriver浏览器作为一个remote-server 接受脚本的命令同时webservice会打开一个端口http://localhost:9515 浏览器则会监听这个端口。 2、webservice会将脚本语言翻译成json格式传递给浏览器执行操作命令。 逻辑层面 1、测试人员执行测试脚本后就创建了一个session, 通过http 请求向webservice发送了restfull的请求。 2、webservice翻译restfull的请求为浏览器能懂的脚本然后接受脚本执行结果。 3、webservice将结果进行封装--json 给到客户端client/测试脚本 然后client就知道操作是否成功同时测试也可以进行校验了。 我们可以验证一下 下载好chromedriver放到环境变量里注意要和chrome浏览器版本对上然后执行chromedriver 可以看到会启动一个server, 并开启端口9515 andersons-iMac:~ anderson$ chromedriver Starting ChromeDriver 2.39.562713 (dd642283e958a93ebf6891600db055f1f1b4f3b2) on port 9515 Only local connections are allowed. GVA info: Successfully connected to the Intel plugin, offline Gen9 强调了只允许本地连接。前面已经提过了乘客向司机发一个请求行为是构造一个http请求。构造的请求是这样子的 请求方式 POST 请求地址 http://localhost:9515/session 请求body    capabilities {capabilities: {alwaysMatch: {browserName: chrome},firstMatch: [{}]},desiredCapabilities: {platform: ANY,browserName: chrome,version: ,chromeOptions: {args: [],extensions: []}}}我们可以尝试使用python requests 向 ChromeDriver发送请求import requestsimport jsonsession_url http://localhost:9515/sessionsession_pars {capabilities: {firstMatch: [{}], \alwaysMatch: {browserName: chrome,\platformName: any, \goog:chromeOptions: {extensions: [], args: []}}}, \desiredCapabilities: {browserName: chrome, \version: , platform: ANY, goog:chromeOptions: {extensions: [], args: []}}}r_session requests.post(session_url,jsonsession_pars)print(json.dumps(r_session.json(),indent2))结果{sessionId: 44fdb7b1b048a76c0f625545b0d2567b,status: 0,value: {acceptInsecureCerts: false,acceptSslCerts: false,applicationCacheEnabled: false,browserConnectionEnabled: false,browserName: chrome,chrome: {chromedriverVersion: 2.40.565386 (45a059dc425e08165f9a10324bd1380cc13ca363),userDataDir: /var/folders/yd/dmwmz84x5rj354qkz9rwwzbc0000gn/T/.org.chromium.Chromium.RzlABs},cssSelectorsEnabled: true,databaseEnabled: false,handlesAlerts: true,hasTouchScreen: false,javascriptEnabled: true,locationContextEnabled: true,mobileEmulationEnabled: false,nativeEvents: true,networkConnectionEnabled: false,pageLoadStrategy: normal,platform: Mac OS X,rotatable: false,setWindowRect: true,takesHeapSnapshot: true,takesScreenshot: true,unexpectedAlertBehaviour: ,version: 71.0.3578.80,webStorageEnabled: true}} 如何打开一个网页类似driver.get(url) 那么构造的请求是 请求方式 POST 请求地址 http://localhost:9515/session/:sessionId/url 注意上述地址中的 :sessionId 要用启动浏览器的请求返回结果中的sessionId的值 例如我刚刚发送请求启动浏览器返回结果中sessionId: 44fdb7b1b048a76c0f625545b0d2567b   然后请求的URL地址 请求地址http://localhost:9515/session/b2801b5dc58b15e76d0d3295b04d295c/url 请求body {url: https://www.baidu.com, sessionId: 44fdb7b1b048a76c0f625545b0d2567b} 即  import requestsurl http://localhost:9515/session/44fdb7b1b048a76c0f625545b0d2567b/urlpars {url: https://www.baidu.com, sessionId: 44fdb7b1b048a76c0f625545b0d2567b}r requests.post(url,jsonpars)print(r.json())如何定位元素类似driver.finde_element_by_xx: 请求方式 POST 请求地址 http://localhost:9515/session/:sessionId/element 注意上述地址中的 :sessionId 要用启动浏览器的请求返回结果中的sessionId的值。 例如我刚刚发送请求启动浏览器返回结果中sessionId: b2801b5dc58b15e76d0d3295b04d295c   然后我构造 查找页面元素的请求地址 请求地址http://localhost:9515/session/b2801b5dc58b15e76d0d3295b04d295c/element 请求body {using: css selector, value: .postTitle a, sessionId: b2801b5dc58b15e76d0d3295b04d295c} 即 import requests url http://localhost:9515/session/b2801b5dc58b15e76d0d3295b04d295c/element pars {using: css selector, value: .postTitle a, sessionId: b2801b5dc58b15e76d0d3295b04d295c} r requests.post(url,jsonpars) print(r.json()) 如何操作元素类似click() 请求方式 POST 请求地址 http://localhost:9515/session/:sessionId/element/:id/click 注意上述地址中的 :sessionId 要用启动浏览器的请求返回结果中的sessionId的值 :id 要用元素定位请求后返回ELEMENT的值 例如我刚刚发送请求启动浏览器返回结果中sessionId: b2801b5dc58b15e76d0d3295b04d295c   元素定位,返回ELEMENT的值0.11402119390850629-1 然后我构造 点击页面元素的请求地址 请求地址http://localhost:9515/session/b2801b5dc58b15e76d0d3295b04d295c/element/0.11402119390850629-1/click 请求body {id: 0.11402119390850629-1, sessionId: b2801b5dc58b15e76d0d3295b04d295c} 即   import requestsurl http://localhost:9515/session/b2801b5dc58b15e76d0d3295b04d295c/element/0.11402119390850629-1/clickpars {id: 0.5930642995574296-1, sessionId: b2801b5dc58b15e76d0d3295b04d295c}r requests.post(url,jsonpars)print(r.json())从上面可以看出来UI自动化其实也可以写成API自动化。 只是只是 好繁琐没有封装好的wedriver指令好用有点脱裤子放屁的感觉。 我们来写段代码感觉一下 import requestsimport timecapabilities {capabilities: {alwaysMatch: {browserName: chrome},firstMatch: [{}]},desiredCapabilities: {platform: ANY,browserName: chrome,version: ,chromeOptions: {args: [],extensions: []}}} # 打开浏览器 http://127.0.0.1:9515/session res requests.post(http://127.0.0.1:9515/session, jsoncapabilities).json() session_id res[sessionId] # 打开百度 requests.post(http://127.0.0.1:9515/session/%s/url % session_id, json{url: http://www.baidu.com, sessionId: session_id}) time.sleep(3) # 关闭浏览器删除session requests.delete(http://127.0.0.1:9515/session/%s % session_id, json{sessionId: session_id}) 其实搞懂真正的原理也就是为了方便解决问题在debug的时候更方便的查看和解决问题。 当然如果在接口自动化里面也需要调用少量的UI自动化可以考虑这种方式。 最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你
http://www.w-s-a.com/news/895538/

相关文章:

  • 图片渐隐 网站头部flash地方志网站建设自查报告
  • 深圳做商城网站视觉品牌网站建设
  • 永康电子商务网站建设弹幕网站怎么做
  • 百川网站企业做网站要注意哪些
  • 球迷类的网站如何做网站建设需要哪些素材
  • 请问有重庆有做网站吗电子政务系统网站建设的基本过程
  • 建设银行管方网站官网最新版cmsv6
  • 网站开发工程师需要会写什么深圳网站(建设信科网络)
  • 台州网站搭建网站建设需求计划
  • 网站app免费下载软件大全大连百度推广哪家好
  • 网站建设的面试要求iis做的网站手机怎么访问
  • 定州市住房保障和城乡建设局网站上海网站建设排行
  • 网站发帖百度收录网站改版后不收录
  • 昆明建设局网站号码网站开发 浏览器兼容性
  • 湖北专业网站建设大全室内设计联盟app下载
  • 网站建设的意义和作用江苏城市建设档案馆网站
  • 华为云速建站贴心的广州网站建设
  • 网页网站开发公司天津seo推广
  • 网站线框图用什么做共享门店新增礼品卡兑换模式
  • 互联网建站是什么seo服务公司上海
  • 象山县城乡建设局网站做网站客户要求分期
  • 什么是网络营销型网站手机网站 图标
  • 全国新农村建设网站外包和劳务派遣哪个好
  • 网站权限控制什么软件做网站描述
  • 建网络商城网站wordpress关于
  • 专业网站建设分类标准重庆网站开发哪家专业
  • 织梦的网站关键词如何自己搭建微信小程序
  • 怎么做基金公司网站韩都衣舍网站建设ppt
  • 外贸网站模板aspnet网站开发 视频
  • 上海植物租赁做网站南浔网站建设