expect-webdriverio icon indicating copy to clipboard operation
expect-webdriverio copied to clipboard

String option 'ignoreCase' not working for 'toHaveText()' with option expect.stringContaining

Open carri747 opened this issue 10 months ago • 3 comments

Hi

It seems like the option ignoreCase is not working for the toHaveText() assertion method, when I include the option expect.stringContaining();

Given this assertion:

await expect(headerTitle).toHaveText(expect.stringContaining(name), { ignoreCase: true, asString: true });

I'm getting this error when running the test:

Expected: StringContaining "Japanese"
Received: "japanese"

Is that a bug or do the 'stringOptions' just don't work for toHaveText with stringContaining?

Best regards,

carri747 avatar Apr 17 '24 15:04 carri747

@carri747 thanks for reporting, this is indeed a bug and we would appreciated any contributions for this one.

christian-bromann avatar Apr 17 '24 23:04 christian-bromann

Hi @christian-bromann after review project code, I've this conclusion but I would like your confirmation, because I think that there is a misunderstood between code and documentation.

I'm trying to implement this: await expect(headerTitle).toHaveText(expect.stringContaining(name), { ignoreCase: true, asString: true }); You can see similar examples in this page https://webdriver.io/docs/api/expect-webdriverio/#tohavetext

Checking the code, I could check that this behavior is possible to implement with the current version: In file "util.ts" the function "compareText" the second parameter ("expect") received String or ReGext or PartialMatcher. Checking the code it's possible to implement the function "ignoreCase" with the next sentence:

await expect(headerTitle).toHaveText(name, { ignoreCase: true, containing: true });

My questions are:

  • is this right?
  • Why in the official page is not mention that instead of "expect.String...."?
  • Am I doing something wrong?
  • is the official doc updated?
  • Why in the official doc mention "supported starting with v9"?

Could you help me with that?

Thanks in advance.

carri747 avatar May 10 '24 10:05 carri747

  • is this right?

containing is another way to verify a string contains a substring. IMO the following two should be equal operations:

await expect(headerTitle).toHaveText(expect.stringContaining(name), { ignoreCase: true });
await expect(headerTitle).toHaveText(name, { ignoreCase: true, containing: true });
  • Why in the official page is not mention that instead of "expect.String...."?

We have documented asymmetric matchers here: https://webdriver.io/docs/api/expect-webdriverio#asymmetric-matchers .. we are planning to remove all xxxContaining matchers and therefore have been updating the docs to point people to use asymmetric matchers.

  • Am I doing something wrong?

I don't know, above examples should work, if they don't, it is a bug.

  • is the official doc updated?

Updated in regards to what?

  • Why in the official doc mention "supported starting with v9"?

Because we will drop all xxxContaining matchers in v9.

christian-bromann avatar May 10 '24 16:05 christian-bromann