【问题标题】:Error while trying to assert getText in WebdriverIO尝试在 WebdriverIO 中断言 getText 时出错
【发布时间】:2020-01-09 20:29:50
【问题描述】:

我正在尝试声明在媒体库覆盖页上看到的文本。我想要的只是让代码验证文本是否存在,如果存在,则资产与预期的文本匹配。

由于某种原因,我不断收到失败的测试。下面是我用Visual Code写的代码:

let expSuccessARMessage = "See it in Your Space (Augmented Reality) is currently only available using an AR compatible Apple device (iOS 12 or above)."
let successARMessage = browser.getText(page.pageElements.arMessage);

console.log(successARMessage);
assert(successARMessage === expSuccessARMessage, 'Success message');

我在这里错过了什么?

【问题讨论】:

  • 您可能想尝试使用这样的 XPATH: //*[contains(text(), 'text to check for'] 使用 getElements,然后检查数组大小是否 > 0 .
  • 您好,请提供您看到的 webdriver.io 日志。
  • 包含控制台日志(至少包含 COMPLETE 堆栈跟踪错误)和 package.json 软件依赖项通常是一种很好的做法,以便我们可以重现您的设置。这适用于您在 StackOverflow 上发布的任何问题。祝你好运!

标签: javascript selenium webdriver assert webdriver-io


【解决方案1】:

不是魔术师,但您应该在控制台中收到browser.getText is not a function 错误,因为getText() 方法是在element 对象内部定义的,而不是browser 对象。阅读完整的 API 日志 here

所以你的代码应该是:

let expectedText = "Your long text here"
let foundText = $(page.pageElements.arMessage).getText();
// Considering 'page.pageElements.arMessage' is a valid selector for targeted element

console.log(`Found the following text: ${foundText}`);
assert.equal(expectedText, foundText, 'This is actually the ERROR message');

我想补充一点,也可以使用 webdriver 协议 API 以 browser 对象为中心的方法。因此,我们的代码变为:

let expectedText = "Your long text here"
let elementObject = browser.findElement('css selector', page.pageElements.arMessage);
// Considering 'page.pageElements.arMessage' is a valid selector for targeted element
let foundText = browser.getElementText(elementObject.ELEMENT);

console.log(`Found the following text: ${foundText}`);
assert.equal(expectedText, foundText, 'This is actually the ERROR message');

恕我直言,后一种方法已过时,WebdriverIO v5 的推荐方法是分别使用 $$$元素和元素)。但想给你一个更广阔的视野。

【讨论】:

    【解决方案2】:

    如果您将元素定义到对象存储库中,例如:

    get OtpDescriptionText () { return '//div[@class="otp-description"]'; }
    

    为了 consoleassert/expect 您需要使用该元素,例如:

    let elem1 = await $(RegistratonPage.OtpDescriptionText);
    console.log(await elem1.getText());
    

    await expect($(RegistratonPage.OtpDescriptionText)).toHaveTextContaining('We just need to check this phone number belongs to you.')
    

    如果不使用 $,则会抛出错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多