如何在独立模式下调试webdriverio?

2023-11-30

http://webdriver.io/guide/getstarted/modes.html

尝试使用 Chromedriver 调试 webdriverio 测试时我简直要疯了。您根本无法单步调试代码,因为 webdriverio 命令是异步的,并且浏览器会话与测试不同步。

这很令人沮丧,因为阅读文档,似乎您需要一个像 Chai 或 wdio 这样的测试框架来生成测试,但这似乎只是为了程序同步命令需要做很多工作。

我只需要使用 webdriverio 抓取一些网站,但是使用 Chrome 开发工具调试此异步命令太困难了。

有没有办法强制 webdriverio 同步运行?

ex)

var loadedPage = webdriverio.remote(options).init().url('https://google.com');

except loadedPage尚未准备好,并且在调试移动到下一行时未定义。


正如您正确指出的那样,一切都是异步的,但使用 WDIO,如果您有传统的顺序编程背景,您还可以选择完全同步。

  • 异步方法(不使用WDIO 测试运行程序):

    首先,您必须阅读一些有关JavaScript 承诺,尤其是.then()功能。

     var webdriverio = require('webdriverio');
     var options = { desiredCapabilities: { browserName: 'chrome' } };
     var client = webdriverio.remote(options);
     client
         .init()
         .url('https://duckduckgo.com/')
         .setValue('#search_form_input_homepage', 'WebdriverIO')
         .click('#search_button_homepage')
         .getTitle()
         .then(function(title) {
             console.log('Title is: ' + title);
             // outputs: "Title is: WebdriverIO (Software) at DuckDuckGo"
         })
         .end();
    

    使用上述方法,您将总是必须链接你的命令,但您也可以在内部使用同步命令.then()陈述。

    出于调试目的,WebdriverIO 开箱即用,设计精美读取-评估-打印循环 (REPL) 接口形式为the .debug() command。只需在您希望执行停止的位置之前将其添加到您的测试用例中,以便您可以在您选择的终端内进行调试。

    Note:默认超时时间为.debug()命令很短。确保增加它。

  • 同步方法(使用WDIO 测试运行程序):

    为什么不使用 WDIO 测试运行程序来让您的生活更轻松?您可以通过运行向导开始:

     // if you installed the package globally, or you have the wdio
     // binary in your PATH
     wdio config 
     // or. from the root of your project
     ./node_nodules/.bin/wdio config
    

    以上将产生wdio.conf.js文件位于项目根目录中。测试运行者将使用它将来运行您的测试用例。测试运行程序还抽象了您的初始化.client(),你就不会再去处理它了。只需选择一个框架来运行您的测试用例(Mocha、Cucumber 或 Jasmine)并开始编写测试。

    Note:今后,browser将是您的驱动程序对象。 另外,请确保您拥有wdio.conf.js配置文件以支持这种运行测试用例的方式:设置同步标志以支持这种方法:sync: true。您可以通过以下方式运行测试wdio wdio.conf.js命令。

    您的测试应如下所示(使用 Mocha):

     var expect = require('chai').expect;
    
     describe("Testing Robots Emporium Test Suite", function() {
    
         beforeEach(function() {
             // ==> Your setup here <==
             browser.url('http://www.kevinlamping.com/webdriverio-course-content/index.html')
             var currentUrl = browser.getUrl();
             expect(currentUrl).include("/index.html");        
         })
    
         it("The FAQs was rendered properly", function() {
    
             var height = browser.getCssProperty("ul.accordion", 'height');
             // Added a debug step just to show you how easy it is to debug
             browser.debug();
             expect(height.parsed.value).to.be.above(300);
             // The first element was expanded
             var firstItemText = browser.getText('ul.accordion li:nth-of-type(1) div');
             expect(firstItemText).to.contain('be of the metal type.');
         });
    
         afterEach(function() { 
            // ==> Your cleanup here <==
         });
     });
    
  • 异步方法(使用WDIO 测试运行程序):

    这是我的首选方法。它为您提供了对测试用例执行的最佳控制,但如果您刚刚开始,我不建议您这样做。基本上就是上面的例子,但是所有的命令都是链接的。

    Note:确保您拥有sync: false为此设置标志。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在独立模式下调试webdriverio? 的相关文章

随机推荐

  • jQuery ajax 加载 MVC 控制器参数的问题

    介绍 我正在使用带有 WebApi 2 0 和 jQuery 的 ASP NET MVC 5 Problem 我正在尝试显示一个带有来自 ajax 调用的用户详细信息的模式 使用 getJSON 我成功收到来自 WebApi 的 Json
  • 无法在 Heroku 上“运行”

    我已经将 Clojure 应用程序部署到 Heroku 当我运行 请求它时 我收到错误 http glowing planet 168 herokuapp com 所以现在我想启动一个 REPL 看看是否可以获得更多信息 但是当我尝试时我得
  • 从 Fortran 调用 C 函数,其中 C 函数名称最初是从 C 传入的

    由于不相关的原因 我需要将 C C 函数名称传递到 Fortran 子例程中 该子例程又调用该 C 函数 我发现我可以成功地将函数名称传递到 Fortran 子例程中 在该子例程中我可以调用正确的 C 函数 然而 C 函数的参数在这次调用中
  • Java计算器不执行if语句[重复]

    这个问题在这里已经有答案了 我对编程比较陌生 最近开始学习 Java 以便进入 Android 编程 我以为我会创建一个非常简单的计算器来练习 但似乎我的 if 语句不起作用 import java util Scanner public
  • 即使我获得了类窗口的句柄,BringWindowToTop 也不起作用

    我用以下方法注册我的班级 BOOL CNDSClientDlg InitInstance Register Window Updated on 16th Nov 2010 Subhen Register our unique class n
  • 调整大小的黑色画布不会随着时间的推移完全褪色为黑色

    我有一块黑色画布 里面画着东西 我希望里面绘制的东西随着时间的推移 按照绘制的顺序 先进先出 逐渐变成黑色 如果我使用尚未调整大小的画布 则此方法有效 调整画布大小时 元素会褪色为灰白色 问题 调整画布大小后 为什么白色斑点没有完全褪色为黑
  • 如何在ViewModel中玩Storyboard?

    我在 View 中定义了一个故事板
  • 海量设备/节点的距离计算

    I have N移动设备 节点 比如 100K 我定期获取它们的位置 纬度 经度 值 一些设备 逻辑连接 到大致M其他设备 比如 10 个 我的程序定期比较每个设备与其逻辑连接的设备之间的距离 并确定该距离是否在阈值内 例如 100 米 我
  • 在 iOS 中单击 UIButton 时如何将项目插入到 UITableView

    我一直在练习 tableViews 但我不知道如何在单击按钮时插入新项目 这就是我所拥有的 BIDViewController h import
  • 有什么作用!! R 中的运算符均值

    有人可以解释一下我们需要什么吗 or 运营商来自rlang 我尝试学习more关于准引用但没有得到任何东西 我已经在 Stack 上找到了几篇关于 curly curly 运算符的帖子 并且了解到我们使用 当我们将数据帧的变量 或对象的其他
  • 尝试编写一个简单的轮播

    我正在尝试构建一个简单的轮播 我知道有很多 但我更喜欢尝试找出答案 这是我的轮播代码 div class amnavigation div class previous lt div ul li icon li li icon li li
  • 将静态库答案放在 flash 部分的开头

    我正在使用 atmelstudio 编译固件映像 并希望将静态库 包括 gnu 的 libc a 和 libgcc a 中的函数放在 text 部分的开头 后面的 text 属于我的项目源代码 现在发生的情况恰恰相反 这是我的链接器脚本 A
  • 使用未知的编码键和值进行 Swift 解码[重复]

    这个问题在这里已经有答案了 我想从服务器解码以下对象 USD 6385 74 JPY 715249 73 EUR 5582 36 但我想使用具有未知键和值的可解码结构 这可能吗 Regards Spyros 你可以试试 let res tr
  • Node.js 中的计时器在自己的线程上运行吗?

    我在这里有点困惑 我知道 Javascript 是一种单线程语言 但在阅读事件循环时 我知道 在 setTimeout 或 setInterval 的情况下 JavaScript 会调用浏览器提供的 Web API 该 API 会生成一个新
  • ARM 指令 ldrex/strex 是否必须对缓存对齐的数据进行操作?

    在 Intel 上 CMPXCHG 的参数必须与缓存行对齐 因为 Intel 使用 MESI 来实现 CAS 在 ARM 上 ldrex 和 strex 对独占保留颗粒进行操作 需要明确的是 这是否意味着在 ARM 上操作的数据不必进行缓存
  • 根据 SQL 中设置的规则过滤列中的行

    我是 SQL 新手 我想根据设定的规则过滤列上的值 Group ID 1 09239820 2 2872498938 2 1267 3 23219823983 3 267839236 4 33287442 我想用字母替换 ID 列中的第 1
  • Java - Google API - 发布文档

    我在使用 Google 文档 API 上传信息时遇到问题 任务是上传文档 然后在上传后立即发布 我已经解决了第一部分 得到一个DocsService客户 通过以下方式验证我自己的身份client setUserCredentials use
  • OpenGL到底是如何进行透视校正线性插值的?

    如果线性插值发生在 OpenGL 管道的光栅化阶段 并且顶点已经转换到屏幕空间 那么用于透视正确插值的深度信息从何而来 谁能详细描述 OpenGL 如何从屏幕空间基元到具有正确插值的片段 顶点着色器的输出是four分量向量 vec4 gl
  • Jquery UI 对话框代替 javascript 确认

    我有一堆带有确认的验证 javascript 进程 我想使用 jquery ui 对话框 但我需要为其余验证过程返回 true 例如 var where to coupon confirm pm info msg 013 if where
  • 如何在独立模式下调试webdriverio?

    http webdriver io guide getstarted modes html 尝试使用 Chromedriver 调试 webdriverio 测试时我简直要疯了 您根本无法单步调试代码 因为 webdriverio 命令是异