expect-webdriverio
expect-webdriverio copied to clipboard
String option 'ignoreCase' not working for 'toHaveText()' with option expect.stringContaining
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 thanks for reporting, this is indeed a bug and we would appreciated any contributions for this one.
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.
- 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
.