自动化工具 robot framework,Chrome 跑的时候,速度太快,每一步执行时都需要等待 (sleep) 才能找到需要检查的元素和执行下一步操作,有没有什么办法全局设置每步执行的时间

zonghaotang · 2019年08月05日 · 最后由 xinxjxjxj 回复于 2019年08月15日 · 4437 次阅读

robot framework,Chrome 跑的时候,速度太快,每一步执行时都需要等待才能找到需要检查的元素和执行下一步操作,有没有什么办法全局设置每步执行的时间。

或者请问下大佬们 每一步操作之间是怎么处理的 让页面加载到需要检查或者执行的元素的!谢谢

共收到 14 条回复 时间 点赞
zonghaotang 关闭了讨论 08月05日 18:21
zonghaotang 重新开启了讨论 08月05日 18:24

wait for element,有类似的关键字,可以等你要的元素出现之后再执行

可以将操作封装为接口在接口里面控制,也可以封装原来的操作 API 在里面统一处理,也可以定义一个 global 全局变量,其实方法应该较多,怎么好修改和维护怎么来吧

装饰器就可以了

Jerry li 回复

谢谢,不过这个方法太麻烦了,每步操作都需要加的话,还是很繁琐

大佬,可以稍微具体点吗,我没有接触过装饰器,可以去搜着学学,但是还希望指点一下具体怎么实现。。。谢谢

主要是研究的没有大佬透彻,这些方法我竟然没有一个会的,可不可以加下大佬联系方式,沟通学习一下,个人 QQ:631135273

想了个比较傻的办法,你在封装的 find element 方法里面先写一句 sleep 1 不就好了~然后调这个方法

selenium 的显式等待和隐式等待可以用的;
如果在多处都要等待可以用 python 的装饰器

写个 retry,如果找不到元素就重试,里面加一个 sleep,重试三次还找不到,就报失败

尝试了一下,可以使用 Set Selenium Speed 方法控制速度

封装 API:

 /**
 * Description: start webdirver</BR>
 * 内容描述:启动WebDriver实例。
 */
@Override
public void startWebDriver() {
    cleanBrowserProcess();
    chromeDriverEnviromentSetter();
    try {
        driver = new EventFiringWebDriver(new ChromeDriver(service, getCapabilities())).register(listener);
        driver.manage().timeouts().pageLoadTimeout(maxLoadTime, TimeUnit.SECONDS);
        driver.manage().timeouts().setScriptTimeout(maxWaitfor, TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(maxWaitfor, TimeUnit.SECONDS);
    } catch (Exception e) {
        LoggerUtils.error(e);
        throw new RuntimeException(e);
    }
}
zlp 回复

这么真实的吗😂

同意 #12,最简单的做法就是在开始使用 set selenium speed,这个是修改全局 robotframework 执行速度的,但是会导致用例执行的等待时间弹性不够
建议还是还是在需要等待的元素操作前面加 wait for xxx,不用每个操作都加,主要考虑页面加载,页面刷新和菜单弹出就行了

RF 等待:
隐式等待 Set Selenium Implicit Wait ,构造 driver 的时候用
显式等待 如: Wait Until Element Contains,操作元素的时候用
两者的区别可以百度看看

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册