Python Selenium+ Robotframework 学习三:常见异常FAQ

Python Selenium+ Robotframework 学习三:常见异常FAQ,第1张

Python Selenium+ Robotframework 学习三:常见异常FAQ 常见异常一: 现象:selenium.common.exceptions.TimeoutException: Message

解决方案:

1.检查查找元素的语句书写是否正确,是否存在漏符号现象

2.检查是否在一个frame上,笔者在一开始写用例时遇到一个问题,写到某一个后面的方法通过切换frame时,一直报错No such frame,然后笔者就去掉了切换frame的语句,去掉frame切换后,在打开某个界面寻找元素时,不论这个界面上的元素是啥,全都是上面这个Timeout的报错,检查元素的定位方式并没有问题,尝试了各种方法,显示等待/隐式等待/强制等待/句柄/循环等等,一直没有解决,后面逐一排查代码发现最开始的一个函数里切换了frame一直没有切换回去导致了这个报错,类似问题可以排查用例前面的函数是否有漏切换frame的语句。供参考如下。

self.driver.switch_to.frame(0)  # 切换到当前frame,注意使用完后需要切换回去self.driver.switch_to.default_content()  # 切换回原本的frame
常见异常二: 现象:stale element reference exception

原因:

用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.

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5479491.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存