Browser detection using user agent in fixture hooks
up vote
1
down vote
favorite
I have a few tests that only need to be run when in a mobile browser. Currently I have a client function to check the user agent.
const checkMobile = ClientFunction(() => /iPhone|Android/i.test(navigator.userAgent))
Which I then access inside my tests:
test("Check if mobile", async t =>
const isMobile = await checkMobile();
if (isMobile)
await t
// do the tests
Is there a way for me to use this in a fixture? Like a fixture which will only run if checkMobile
is true
? So I don't need to repeat this check in every test manually. I'm sure there's a smarter way to go about it than what I have right now. I tried doing the check in the fixture's beforeEach
hook but it didn't work out for me to then try to share the outcome of that in a variable to pass down to the tests.
automated-tests e2e-testing testcafe
add a comment |
up vote
1
down vote
favorite
I have a few tests that only need to be run when in a mobile browser. Currently I have a client function to check the user agent.
const checkMobile = ClientFunction(() => /iPhone|Android/i.test(navigator.userAgent))
Which I then access inside my tests:
test("Check if mobile", async t =>
const isMobile = await checkMobile();
if (isMobile)
await t
// do the tests
Is there a way for me to use this in a fixture? Like a fixture which will only run if checkMobile
is true
? So I don't need to repeat this check in every test manually. I'm sure there's a smarter way to go about it than what I have right now. I tried doing the check in the fixture's beforeEach
hook but it didn't work out for me to then try to share the outcome of that in a variable to pass down to the tests.
automated-tests e2e-testing testcafe
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I have a few tests that only need to be run when in a mobile browser. Currently I have a client function to check the user agent.
const checkMobile = ClientFunction(() => /iPhone|Android/i.test(navigator.userAgent))
Which I then access inside my tests:
test("Check if mobile", async t =>
const isMobile = await checkMobile();
if (isMobile)
await t
// do the tests
Is there a way for me to use this in a fixture? Like a fixture which will only run if checkMobile
is true
? So I don't need to repeat this check in every test manually. I'm sure there's a smarter way to go about it than what I have right now. I tried doing the check in the fixture's beforeEach
hook but it didn't work out for me to then try to share the outcome of that in a variable to pass down to the tests.
automated-tests e2e-testing testcafe
I have a few tests that only need to be run when in a mobile browser. Currently I have a client function to check the user agent.
const checkMobile = ClientFunction(() => /iPhone|Android/i.test(navigator.userAgent))
Which I then access inside my tests:
test("Check if mobile", async t =>
const isMobile = await checkMobile();
if (isMobile)
await t
// do the tests
Is there a way for me to use this in a fixture? Like a fixture which will only run if checkMobile
is true
? So I don't need to repeat this check in every test manually. I'm sure there's a smarter way to go about it than what I have right now. I tried doing the check in the fixture's beforeEach
hook but it didn't work out for me to then try to share the outcome of that in a variable to pass down to the tests.
automated-tests e2e-testing testcafe
automated-tests e2e-testing testcafe
asked Nov 9 at 2:50
sammiepls
627
627
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
accepted
To share a variable from the fixture hook for testing, you can use fixture context
http://devexpress.github.io/testcafe/documentation/test-api/test-code-structure.html#sharing-variables-between-fixture-hooks-and-test-code
In addition, you can reorganize your test in the following manner:
import ClientFunction from 'testcafe';
fixture `test`.page('http://example.com').beforeEach(async t =>
const isMobile = await checkMobile();
t.ctx.isMobile = isMobile;
)
const checkMobile = ClientFunction(() => /iPhone|Android/i.test(navigator.userAgent))
function testAndCheck (testName, testFn)
const foo = async t =>
if (t.ctx.isMobile)
await testFn(t)
else
throw new Error('not mobile');
test(testName, foo);
testAndCheck('test1', async t =>
await t.click('h1');
await t.click('div');
await t.click('h1');
)
Here I define the testAndCheck
function that extends the test
function with an additional check for mobile devices.
In addition, you can refer to this comment https://github.com/DevExpress/testcafe/issues/1626#issuecomment-417424558 to see which other ways exist to overcome the issue.
Thanks so much Alex! Before I approve your answer I'd like to clarify if it's possible to check if it's mobile first before running the entire fixture? I don't really want to throw an error, just want to skip the whole fixture (which I'm putting all my mobile tests in, so would make sense on desktop to skip it completely)
– sammiepls
Nov 15 at 3:11
1
It's not required to throw an error. You can just avoid using theelse
branch. If suggested solutions don't suit your needs, you can reorganize your test approach. For example, run the testcafe command twice for desktop and mobile devices:testcafe chrome,firefox desktop-tests.js
testcafe remote mobile.js
Or, you can use the new testcafe filtering feature devexpress.github.io/testcafe/documentation/using-testcafe/…testcafe chrome my-tests --fixture-meta device=mobile,env=production
– Alex Kamaev
Nov 15 at 7:58
Is it possible to skip tests within thebefore
hooks of the fixture?
– sammiepls
Nov 21 at 3:12
1
@sammiepls, For now, you can achieve the desired behavior only by using the workaround which I suggested in my answer. You can replace theisMobile
condition with yours. However, I think that it would be nice to have this feature, so probably we'll implement it in the future.
– Alex Kamaev
Nov 21 at 9:31
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
To share a variable from the fixture hook for testing, you can use fixture context
http://devexpress.github.io/testcafe/documentation/test-api/test-code-structure.html#sharing-variables-between-fixture-hooks-and-test-code
In addition, you can reorganize your test in the following manner:
import ClientFunction from 'testcafe';
fixture `test`.page('http://example.com').beforeEach(async t =>
const isMobile = await checkMobile();
t.ctx.isMobile = isMobile;
)
const checkMobile = ClientFunction(() => /iPhone|Android/i.test(navigator.userAgent))
function testAndCheck (testName, testFn)
const foo = async t =>
if (t.ctx.isMobile)
await testFn(t)
else
throw new Error('not mobile');
test(testName, foo);
testAndCheck('test1', async t =>
await t.click('h1');
await t.click('div');
await t.click('h1');
)
Here I define the testAndCheck
function that extends the test
function with an additional check for mobile devices.
In addition, you can refer to this comment https://github.com/DevExpress/testcafe/issues/1626#issuecomment-417424558 to see which other ways exist to overcome the issue.
Thanks so much Alex! Before I approve your answer I'd like to clarify if it's possible to check if it's mobile first before running the entire fixture? I don't really want to throw an error, just want to skip the whole fixture (which I'm putting all my mobile tests in, so would make sense on desktop to skip it completely)
– sammiepls
Nov 15 at 3:11
1
It's not required to throw an error. You can just avoid using theelse
branch. If suggested solutions don't suit your needs, you can reorganize your test approach. For example, run the testcafe command twice for desktop and mobile devices:testcafe chrome,firefox desktop-tests.js
testcafe remote mobile.js
Or, you can use the new testcafe filtering feature devexpress.github.io/testcafe/documentation/using-testcafe/…testcafe chrome my-tests --fixture-meta device=mobile,env=production
– Alex Kamaev
Nov 15 at 7:58
Is it possible to skip tests within thebefore
hooks of the fixture?
– sammiepls
Nov 21 at 3:12
1
@sammiepls, For now, you can achieve the desired behavior only by using the workaround which I suggested in my answer. You can replace theisMobile
condition with yours. However, I think that it would be nice to have this feature, so probably we'll implement it in the future.
– Alex Kamaev
Nov 21 at 9:31
add a comment |
up vote
2
down vote
accepted
To share a variable from the fixture hook for testing, you can use fixture context
http://devexpress.github.io/testcafe/documentation/test-api/test-code-structure.html#sharing-variables-between-fixture-hooks-and-test-code
In addition, you can reorganize your test in the following manner:
import ClientFunction from 'testcafe';
fixture `test`.page('http://example.com').beforeEach(async t =>
const isMobile = await checkMobile();
t.ctx.isMobile = isMobile;
)
const checkMobile = ClientFunction(() => /iPhone|Android/i.test(navigator.userAgent))
function testAndCheck (testName, testFn)
const foo = async t =>
if (t.ctx.isMobile)
await testFn(t)
else
throw new Error('not mobile');
test(testName, foo);
testAndCheck('test1', async t =>
await t.click('h1');
await t.click('div');
await t.click('h1');
)
Here I define the testAndCheck
function that extends the test
function with an additional check for mobile devices.
In addition, you can refer to this comment https://github.com/DevExpress/testcafe/issues/1626#issuecomment-417424558 to see which other ways exist to overcome the issue.
Thanks so much Alex! Before I approve your answer I'd like to clarify if it's possible to check if it's mobile first before running the entire fixture? I don't really want to throw an error, just want to skip the whole fixture (which I'm putting all my mobile tests in, so would make sense on desktop to skip it completely)
– sammiepls
Nov 15 at 3:11
1
It's not required to throw an error. You can just avoid using theelse
branch. If suggested solutions don't suit your needs, you can reorganize your test approach. For example, run the testcafe command twice for desktop and mobile devices:testcafe chrome,firefox desktop-tests.js
testcafe remote mobile.js
Or, you can use the new testcafe filtering feature devexpress.github.io/testcafe/documentation/using-testcafe/…testcafe chrome my-tests --fixture-meta device=mobile,env=production
– Alex Kamaev
Nov 15 at 7:58
Is it possible to skip tests within thebefore
hooks of the fixture?
– sammiepls
Nov 21 at 3:12
1
@sammiepls, For now, you can achieve the desired behavior only by using the workaround which I suggested in my answer. You can replace theisMobile
condition with yours. However, I think that it would be nice to have this feature, so probably we'll implement it in the future.
– Alex Kamaev
Nov 21 at 9:31
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
To share a variable from the fixture hook for testing, you can use fixture context
http://devexpress.github.io/testcafe/documentation/test-api/test-code-structure.html#sharing-variables-between-fixture-hooks-and-test-code
In addition, you can reorganize your test in the following manner:
import ClientFunction from 'testcafe';
fixture `test`.page('http://example.com').beforeEach(async t =>
const isMobile = await checkMobile();
t.ctx.isMobile = isMobile;
)
const checkMobile = ClientFunction(() => /iPhone|Android/i.test(navigator.userAgent))
function testAndCheck (testName, testFn)
const foo = async t =>
if (t.ctx.isMobile)
await testFn(t)
else
throw new Error('not mobile');
test(testName, foo);
testAndCheck('test1', async t =>
await t.click('h1');
await t.click('div');
await t.click('h1');
)
Here I define the testAndCheck
function that extends the test
function with an additional check for mobile devices.
In addition, you can refer to this comment https://github.com/DevExpress/testcafe/issues/1626#issuecomment-417424558 to see which other ways exist to overcome the issue.
To share a variable from the fixture hook for testing, you can use fixture context
http://devexpress.github.io/testcafe/documentation/test-api/test-code-structure.html#sharing-variables-between-fixture-hooks-and-test-code
In addition, you can reorganize your test in the following manner:
import ClientFunction from 'testcafe';
fixture `test`.page('http://example.com').beforeEach(async t =>
const isMobile = await checkMobile();
t.ctx.isMobile = isMobile;
)
const checkMobile = ClientFunction(() => /iPhone|Android/i.test(navigator.userAgent))
function testAndCheck (testName, testFn)
const foo = async t =>
if (t.ctx.isMobile)
await testFn(t)
else
throw new Error('not mobile');
test(testName, foo);
testAndCheck('test1', async t =>
await t.click('h1');
await t.click('div');
await t.click('h1');
)
Here I define the testAndCheck
function that extends the test
function with an additional check for mobile devices.
In addition, you can refer to this comment https://github.com/DevExpress/testcafe/issues/1626#issuecomment-417424558 to see which other ways exist to overcome the issue.
answered Nov 12 at 9:39
Alex Kamaev
4717
4717
Thanks so much Alex! Before I approve your answer I'd like to clarify if it's possible to check if it's mobile first before running the entire fixture? I don't really want to throw an error, just want to skip the whole fixture (which I'm putting all my mobile tests in, so would make sense on desktop to skip it completely)
– sammiepls
Nov 15 at 3:11
1
It's not required to throw an error. You can just avoid using theelse
branch. If suggested solutions don't suit your needs, you can reorganize your test approach. For example, run the testcafe command twice for desktop and mobile devices:testcafe chrome,firefox desktop-tests.js
testcafe remote mobile.js
Or, you can use the new testcafe filtering feature devexpress.github.io/testcafe/documentation/using-testcafe/…testcafe chrome my-tests --fixture-meta device=mobile,env=production
– Alex Kamaev
Nov 15 at 7:58
Is it possible to skip tests within thebefore
hooks of the fixture?
– sammiepls
Nov 21 at 3:12
1
@sammiepls, For now, you can achieve the desired behavior only by using the workaround which I suggested in my answer. You can replace theisMobile
condition with yours. However, I think that it would be nice to have this feature, so probably we'll implement it in the future.
– Alex Kamaev
Nov 21 at 9:31
add a comment |
Thanks so much Alex! Before I approve your answer I'd like to clarify if it's possible to check if it's mobile first before running the entire fixture? I don't really want to throw an error, just want to skip the whole fixture (which I'm putting all my mobile tests in, so would make sense on desktop to skip it completely)
– sammiepls
Nov 15 at 3:11
1
It's not required to throw an error. You can just avoid using theelse
branch. If suggested solutions don't suit your needs, you can reorganize your test approach. For example, run the testcafe command twice for desktop and mobile devices:testcafe chrome,firefox desktop-tests.js
testcafe remote mobile.js
Or, you can use the new testcafe filtering feature devexpress.github.io/testcafe/documentation/using-testcafe/…testcafe chrome my-tests --fixture-meta device=mobile,env=production
– Alex Kamaev
Nov 15 at 7:58
Is it possible to skip tests within thebefore
hooks of the fixture?
– sammiepls
Nov 21 at 3:12
1
@sammiepls, For now, you can achieve the desired behavior only by using the workaround which I suggested in my answer. You can replace theisMobile
condition with yours. However, I think that it would be nice to have this feature, so probably we'll implement it in the future.
– Alex Kamaev
Nov 21 at 9:31
Thanks so much Alex! Before I approve your answer I'd like to clarify if it's possible to check if it's mobile first before running the entire fixture? I don't really want to throw an error, just want to skip the whole fixture (which I'm putting all my mobile tests in, so would make sense on desktop to skip it completely)
– sammiepls
Nov 15 at 3:11
Thanks so much Alex! Before I approve your answer I'd like to clarify if it's possible to check if it's mobile first before running the entire fixture? I don't really want to throw an error, just want to skip the whole fixture (which I'm putting all my mobile tests in, so would make sense on desktop to skip it completely)
– sammiepls
Nov 15 at 3:11
1
1
It's not required to throw an error. You can just avoid using the
else
branch. If suggested solutions don't suit your needs, you can reorganize your test approach. For example, run the testcafe command twice for desktop and mobile devices: testcafe chrome,firefox desktop-tests.js
testcafe remote mobile.js
Or, you can use the new testcafe filtering feature devexpress.github.io/testcafe/documentation/using-testcafe/… testcafe chrome my-tests --fixture-meta device=mobile,env=production
– Alex Kamaev
Nov 15 at 7:58
It's not required to throw an error. You can just avoid using the
else
branch. If suggested solutions don't suit your needs, you can reorganize your test approach. For example, run the testcafe command twice for desktop and mobile devices: testcafe chrome,firefox desktop-tests.js
testcafe remote mobile.js
Or, you can use the new testcafe filtering feature devexpress.github.io/testcafe/documentation/using-testcafe/… testcafe chrome my-tests --fixture-meta device=mobile,env=production
– Alex Kamaev
Nov 15 at 7:58
Is it possible to skip tests within the
before
hooks of the fixture?– sammiepls
Nov 21 at 3:12
Is it possible to skip tests within the
before
hooks of the fixture?– sammiepls
Nov 21 at 3:12
1
1
@sammiepls, For now, you can achieve the desired behavior only by using the workaround which I suggested in my answer. You can replace the
isMobile
condition with yours. However, I think that it would be nice to have this feature, so probably we'll implement it in the future.– Alex Kamaev
Nov 21 at 9:31
@sammiepls, For now, you can achieve the desired behavior only by using the workaround which I suggested in my answer. You can replace the
isMobile
condition with yours. However, I think that it would be nice to have this feature, so probably we'll implement it in the future.– Alex Kamaev
Nov 21 at 9:31
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53219157%2fbrowser-detection-using-user-agent-in-fixture-hooks%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown