Selenium做Web自动化踩过的坑

1.无法定位到元素/定位元素超时(selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element/selenium.common.exceptions.TimeoutException)

在确定xpath无误的情况下,找不到元素的原因我遇到的大部分是等待时间较短,元素未加载出来,可以尝试用下面显示等待的方式解决

2.显示等待

如上所说的情况,在自动化实施过程中,尝尝会有在值执行某步操作或者某个命令之前,先看看要操作的元素是否处于显示状态、是否可操作等需求,也就是看看我们期望的场景是否存在。

这时候就可以使用显示等待,会比较节约测试脚本执行时间,程序会每隔一段时间(默认0.5默秒,也可自定义)执行一下自定义的判定条件。如果条件成立,就执行下一步,否则继续等待,直到最长等待时间,然后抛出TimeoutException异常

例:

#最多等待10秒,直到要找的按钮出现并点击

from selenium.webdriver.support.wait import WebDriverWait

self.wait = WebDriverWait(self.driver, 10)

self.wait.until(lambda x: x.find_element(by="xpath",value='//*[@id="app"]/section/main/div/div/div/div/div/div/div/div[2]/div[3]/div/a')).click()

3.iframe或frame处理

在元素定位过程中,如果出现了<frame>或者<iframe>标签,说明该页面中嵌套了一个新的页面,该页面内的元素无法直接定位。如:

因此,在定位新页面元素之前,我们需要先执行driver.switch_to.frame()方法,切换到该frame下面,再对该frame下的元素进行定位和操作

1)定位到iframe

iframe=self.driver.find_element_by_xpath('//*[contains(@id,"x-URS-iframe")]')

2)切换到iframe

self.driver.switch_to.frame(iframe)

3)对iframe上的元素进行操作

self.driver.find_element_by_xpath('//*[@class="j-inputtext dlemail j-nameforslide"]').send_keys("huisefen")

self.driver.find_element_by_xpath('//[@class="j-inputtext dlpwd"]').send_keys("-")

4)退出iframe

如果想操作该frame以外的元素,可以通过driver.switch_to.parent_frame()方法切换到上一级frame,然后我们可以访问该框架外部而不是该框架内部的元素。这样就切换了控制;外部可以是网页的其他框架或一部分。这样我们就可以脱离当前框架。

self.driver.switch_to.parent_frame()

4.运行成功后未生成测试报告

使用unittest后运行时会默认用unittest去运行脚本(如下图)

这样的话就无法执行到main中的生成报告那部分代码,所以我们需要重新配置一下

(1)点击如下图位置Edit Configuration

(2)重新添加需要执行的文件

(3)点击apply-ok

(4)点击Run运行脚本即可

如果仍未解决,可以将光标放在if name == "main":下,右击,选择“run +文件名”的执行方式执行即可。

(5)还可以尝试将Python tests部分删除后重新运行

5.setUp、tearDown执行多次的问题

setUp(连接数据库、打开浏览器等)、tearDown(关闭数据库,关闭浏览器等)这样反复执行,会影响一个网站执行多个用例(多次打开和关闭浏览器,所有用例并没有全部执行完),数据库的话还会增加服务器资源的损耗,且浪费时间。

那么我们可以通过装饰器实现

0 条评论
请不要发布违法违规有害信息,如发现请及时举报或反馈
还没有人评论呢,速度抢占沙发!
相关文章
  • 上一篇文章,我们分析并设计了关于构建引擎BuildEngine的切面设计。本文我们将基于BuildEngine所提供的切面处理能力,在ComponentBuildAspectHandler中通过一些逻...

  • 我们有时候会不知道断点打在什么地方,比如想知道dom什么时候被修改的,网络请求在哪里 ,什么情况才断点。类似情况有很多,需要对应使用不同的打断点方式才可以提高效率,本文演示已VSCode Debugg...

  • 小程序开发整理 使用uni-app跨端开发框架,代码写法与vue2一致。 一、与web开发的区别 1. 运行方式不同 npm run dev:mp-weixin后,用微信开发者工具打开dist中工...

  • web工程路径 配置tomcat运行快捷键 tomcat启动的默认快捷键时shift+f10,可以自定义配置:file-setting-keymap-搜索run,找到右边写有shift+f10的选...

  • 前言在上篇 2022 你还不会微前端吗 (上) — 从巨石应用到微应用 中已经了解了微前端的由来和基本使用,也提到了一些相关的原理,本篇文章为下篇主要从原理层面进行解析,然后再自己实现一个包含核心部分...

  • 前言  在学习程序开发的时候经常不理解一个工具是前端用的,还是后端用的,想把资料进行分类都分得有点混乱,所以我将我知道的知识点整理成博客前端和后端的区分当我们使用互联网的程序时,比如浏览器中的网页或移...

  • drf入门 一、web应用模式 web的应用模式共分为两种,前后端不分离、前后端分离 1、前后端混合 之前所写的bbs项目就是前后端不分离,后端人员在开发过程中使用模板语法,前后端都由一个人...

  • 我们先来看个例子:在这个网页中,同时在一个页面中展示了三个网站:千锋教育官网、千锋教育HTML5大前端官网、千锋教育HTML5大前端好程序员官网。这是如何做到的呢?其实也不难,使用 iframe 就可...

  • 设计师在工作多年之后,无论是国内BAT或是像Google、Microsoft、Thoughtworks等外企,方法论的积累是非常重要的。当设计师刚入行的时候,看到的知识非常庞杂,如果没有人指点,容易被...

  • 一、前言”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦。并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、...

  • 大家好,我卡颂。最近看到个写得很不错的知乎回答Hooks是否过誉了?前端应该跟着React走还是跟着JS、TS走?- beeplin的回答。在这个回答的基础上,我想引申出一个问题 —— 对于前端状态相...

  • 实现效果图 GitHub 和 Gitee 个人主页中可以对自己的项目进行拖拽排序,于是我就想自己实现一个。本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程...

  • Vins 前端中高效的去畸变的方式解析 1.0 畸变是如何产生的 \(\quad\)我们先来想想3D点是如何投影到图像平面的:世界坐标点经过一个外参矩阵得到相机坐标系下的位置,由于我们经常用到的是归一...

  • 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 这个问题? 这个问题一般会出现在面试题里面,然后回答一些诸如轮询、WebSocket之类的答案。当然,实际开发中,也会遇到类似别人给你...

  • 记录ArcGIS处理三维bim模型全纪录,从原始的rvt格式开始,到最后web前端js api调用的整个过程,并记录部分中间操作过程中出现的问题和解决办法。 本文示例使用: 软件:ArcGIS Pro...

  • 当用户在浏览器的地址栏中输入 URL 并点击回车后,页面是如何呈现的。 简单来说,当用户在浏览器的地址栏中输入 URL 并点击回车后,浏览器从服务端获取资源,然后将内容显示在页面上。这个过程经过了:浏...

  • Django框架 一、Django推导流程 1、纯手撸web框架 web框架本质 web框架的本质就是socket服务端,用来连接前端(socket客户端)与数据库的中间介质 手写web框架...

  • 参考:https://www.cnblogs.com/lxlx1798/articles/16969244.html 要么使用流读取器,要么使用 Reponse 的方法来获取结果,不能同时使用两种方法...

  • 传统性能标准初始化阶段navigationStart:请求开始时间,返回 0unloadEventStart:等于用户代理程序开始前一个文档的卸载事件之前的时间unloadEventEnd:等于用户代...

  • 前端界有两个“教派”,一个叫 Vue,一个叫 React。Vue 的成员看不起 React,React 成员鄙视 Vue,他们认为手中的“教义”就是真理,可以消灭世界一切苦难。但正如没有绝对的真理,也...