1.检查查找元素的语句书写是否正确,是否存在漏符号现象
2.检查是否在一个frame上,笔者在一开始写用例时遇到一个问题,写到某一个后面的方法通过切换frame时,一直报错No such frame,然后笔者就去掉了切换frame的语句,去掉frame切换后,在打开某个界面寻找元素时,不论这个界面上的元素是啥,全都是上面这个Timeout的报错,检查元素的定位方式并没有问题,尝试了各种方法,显示等待/隐式等待/强制等待/句柄/循环等等,一直没有解决,后面逐一排查代码发现最开始的一个函数里切换了frame一直没有切换回去导致了这个报错,类似问题可以排查用例前面的函数是否有漏切换frame的语句。供参考如下。
常见异常二: 现象:stale element reference exception 原因:self.driver.switch_to.frame(0) # 切换到当前frame,注意使用完后需要切换回去self.driver.switch_to.default_content() # 切换回原本的frame
用Robot framework框架做自动化时,碰到同一个case有时pass有时fail,fail的时候抛出stale element reference exception,关于这个异常,官方给出两个可能原因:
The element has been deleted entirely.
The element is no longer attached to the DOM.
无论是否借助框架,实际上的 *** 作都是先找到这个element,然后对它进行 *** 作(一般就是点击),在这两个动作之前,如果Javascript把网页给刷新了,那么 *** 作的时候就会碰到Stale Element Reference Exception。所以这个异常并不是每次都会产生,也不是你想复现就能复现。
参考大佬文章,亲测有效:
[自动化测试]Stale Element Reference Exception - 简书
解决方案:对元素进行 *** 作时,增加重试测试的循环次数,测试后发现有效。
attempts = 0 while attempts < 2: # 点击测试span try: self.webOpr.FindEleWithWaitTime(By.XPATH, "//span[text()='测试用']/following-sibling::input[@class='ant-input']").click() break except: pass attempts += 1常见异常三: 现象:找不到元素 No such element 解决方案:
参考selenium webdriver定位不到元素的五种原因及解决办法_星辰海閣-CSDN博客
1. 元素是动态id,导致定位不到元素
//WebElement xiexin_element = driver.findElement(By.id("_mail_component_82_82"));
WebElement xiexin_element = driver.findElement(By.xpath("//span[contains(.,'写 信')]"));
xiexin_element.click();
上面一段代码注释掉的部分为通过id定位element的,但是此id“_mail_component_82_82”后面的数字会随着你每次登陆而变化,此时就无法通过id准确定位到element。所以推荐使用xpath的相对路径方法查找到该元素。
2. iframe原因定位不到元素
由于需要定位的元素在某一个frame里边,所以有时通过单独的id/name/xpath还是定位不到此元素
3. xpath错误找不到元素,检查xpath能否在浏览器F12情况下,输入xpath路径查到元素
4. 点击速度过快 页面没有加载出来就需要点击页面上的元素
这个需要增加一定等待时间,显示等待时间可以通过WebDriverWait 和util来实现
5.找到元素后,click没有作用,可以试试用action里的sendKeys模仿键盘敲enter键
selenium找不到元素的几种原因(通过xpath定位元素不准确)_jierxiaoyao的博客-CSDN博客_selenium找不到元素
常见异常四: 现象:在robot文件中Library明明导入了对应关键字的py文件,但是运行时一直找不到关键字 解决方案:检查导入的py文件的文件名和文件里的类名是否一致,类的名称必须和模块的名称一致,否则会报错。在各个语言中都是这样,遇到类似文件先检查导入的文件模块和这个文件中的类名是否一致,或者在模块中不写类,只写自定义方法。
[ WARN ] imported library RobotframeworkTestSuiteTest.py' contains no keywords.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)