• Selenium:xPath 定位实践 at 2020年09月11日

    多 PO 模式是个什么概念? 不太了解

  • 嗯 你说的也是我们期望达到的一种状态 只是应用到具体项目上还是得看实际的需求和场景来决定。
    比如我司的产品是企业应用,自动化脚本不仅需要在公司内的测试环境使用 还需要部署到客户现场执行
    而客户提供的环境是我们无法预料的,大多时候性能无法保障,甚至还需要和其他系统共享。所以我们的主要关注点在于测试框架与脚本的稳定性和减少脏数据引起的问题。同时也外挂了性能监控的插件,对于一些操作等待时间很长的步骤也会在测试报告中进行警告提示。但是 也只是如此了。 同样的脚本,在公司中和不同的客户环境中运行,执行时长可能大相径庭,只能做到尽量兼容。

  • Selenium:xPath 定位实践 at 2020年09月10日

    有一说一 懂 xpath 的还是不少 只是能越灵活运用的不多 毕竟 UI 相对接口来说 适用的范围更小一些
    我现在公司的产品是属于管理类的系统,产品周期长,前端的风格也是比较统一的。
    所以我们在实际工作中也在不停的对 PO 模式进行改进,现在系统几百个页面 实际只需要维护一个 PO 文件,一共不到 100 个元素。
    在定义元素 xpath 时把公共部分剥离出来,实际写测试脚本时再输入变量部分就行了,比如某个控件的 label 文本之类的,这也是为什么要使用 xpath 相对定位的好处

  • 是指的通过率 是包括了失败和跳过的一起计算的,稳定性这个指标不好用数字量化吧。
    2500+ 全是回归用例,现在大概有 430 个页面。 失败 case 里面 真正是功能有问题的 大概 20~30% 左右
    有时候可能同一个问题引起很多页面测试失败

  • 1、功能用例和自动化用例想要共享同一套是有点困难的。
    自动化用例需要标准化的输入和输出,而功能用例因为人员素质或者团队管理方面的原因很难做到这一点。
    并且,方便给机器识别的自动化用例往往很难做到像功能用例那样方便让人来阅读。 只能尽量取双方的一个平衡点。
    也可以由你们的自动化团队开发一个功能->自动化的转化工具,这样相对来说对于功能组来说会容易接受一点。毕竟如果你强行要求功能组来编写自动化用例的话,对团队管理水平以及人员的技术素质是有一定的要求的。

    2、用例存在哪里都可以,是你们的实际需求而定。常见的还是 excel 或 yaml 比较多。sql 和 json 的可读性差一些。

    3、测试脚本也需要遵循高内聚,低耦合的原则,颗粒度尽量细,用例之间尽量极少依赖,可以独立运行也可以随意组合运行。

  • 可以用多线程执行用例,单独开一个线程跑这个用例。但是对于你这个异步查询用例所在的线程来说 还是阻塞的。
    如果所有用例都是你说的这种要等 10 分钟才能进行断言的情况,似乎也没有想到有更好的办法

  • 根据领导支持的力度和团队本身的技术水平来决定

  • 2500+ 左右 UI 冒烟用例 通过率基本维持在 85~90% 之间 你说的指标很难达到

    UI 测试受到各方面的影响太多了
    而且很多用例之间有依赖的 前面的挂一个 后面的全 skip

  • 项目周期不长 界面不稳定的话 不建议做 UI 自动化 费效比太低

    接口自动化和 UI 都重要 不存在向哪个方向发展 都需要掌握

  • 在 DOM 树中能找到你寻找的元素就会继续,但这时元素还不一定能响应操作

  • 按键一般是拿来做 RPA 或者游戏自动脚本,因为不是测试工具,也就不会集成测试需要的功能,都需要自己实现。
    算上插件的话,功能是可以满足你的需求的,文字图片等识别都不是问题。但是比较依赖于分辨率,无法做到随处可用

  • 这种异常在 Selenium 自动化中经常会遇到,解决方案只能是重新定位
    定位元素和操作这个元素是有间隔的 。如果操作元素时页面的 dom 树变化了 这个元素也可能会刷新。只能 try catch 重新定位。
    不过 就算重新定位 和你说的 PO 设计模式没有任何关系,我想你可能有点想岔了

  • 下拉框是什么样的 不能选择吗 为什么要输入信息

  • Selenium 获取复制后的链接 at 2020年08月15日

    应该就是一个剪贴板操作,这个也 selenium 无关 ,各语言都有获取剪贴板内容的功能

    String ret = "";
            Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
            // 获取剪切板中的内容
            Transferable clipTf = sysClip.getContents(null);
    
            if (clipTf != null) {
                // 检查内容是否是文本类型
                if (clipTf.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                    try {
                        ret = (String) clipTf
                                .getTransferData(DataFlavor.stringFlavor);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
    
  • 你需要在有滚动条元素中操作 而不是用 document
    比如
    JavascriptExecutor executor = (JavascriptExecutor) driver;
    executor.executeScript("arguments[0].scrollTop=1000",element);

  • 哈哈 是的 没想到在这里能遇到同好 不过都已经是十几年前的事了 😂

  • driver.setFileDetector(new LocalFileDetector());

  • 对于查询类的接口 返回值数据结构复杂的 我的方式是 Excel 和 json 文件结合 excel 里存 json 文件路径,json 文件里存期望值,所有同类型的接口存一个 json 文件

  • 做按键精灵的公司现在做了一款 RPA 工具叫做 UiBot

  • 获取实际定位是什么概念

  • 最老的 selenium 就是用的 js 后来吸收了 webdriver 才改成现在的模式