Skip to content

Commit d5c3b34

Browse files
committed
feat(rules): add 'no-get-raw-id' rule
1 parent 18dcec5 commit d5c3b34

File tree

3 files changed

+126
-0
lines changed

3 files changed

+126
-0
lines changed

docs/rules/no-get-raw-id.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Warn about using deprecated `getInnerHtml()` and `getOuterHtml()` methods
2+
3+
Selenium [has deprecated `getInnerHtml()` and `getOuterHtml()` methods in version 2.53](https://github.com/SeleniumHQ/selenium/blob/96ed95a97405fa267eea09c4008cda9e7703e84d/javascript/node/selenium-webdriver/CHANGES.md#change-summary).
4+
And, hence, Protractor itself _does not have these methods documented_ as a part of [public API](http://www.protractortest.org/#/api) anymore.
5+
6+
## Rule details
7+
8+
Any use of the following patterns are considered warnings:
9+
10+
```js
11+
expect(element(by.id("myid")).getInnerHtml()).toEqual("test");
12+
expect(element(by.id("myid")).getOuterHtml()).toEqual("test");
13+
element.all(by.css(".class")).first().getOuterHtml();
14+
element(by.id("id")).all(by.css(".class")).last().getInnerHtml();
15+
$$(".class").first().getOuterHtml();
16+
$(".class").getInnerHtml().then(function (html) { console.log(html) });
17+
```
18+
19+
The following patterns are not warnings:
20+
21+
```js
22+
expect(element(by.id("myid")).getText()).toEqual("test");
23+
getInnerHtml();
24+
var html = getOuterHtml();
25+
elm.getInnerHTML();
26+
elm.getOuterHTML();
27+
```

lib/rules/no-get-raw-id.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
'use strict'
2+
3+
/**
4+
* @fileoverview Warn about using `getInnerHtml()` and `getOuterHtml()` methods
5+
* @author Alexander Afanasyev
6+
*/
7+
8+
module.exports = {
9+
meta: {
10+
schema: []
11+
},
12+
13+
create: function (context) {
14+
return {
15+
'CallExpression': function (node) {
16+
var object = node.callee.object
17+
var property = node.callee.property
18+
19+
if (object && property) {
20+
var isInnerHtml = property.name === 'getInnerHtml'
21+
var isOuterHtml = property.name === 'getOuterHtml'
22+
if (isInnerHtml || isOuterHtml) {
23+
context.report({
24+
node: node,
25+
message: 'Unexpected "' + property.name + '()"'
26+
})
27+
}
28+
}
29+
}
30+
}
31+
}
32+
}

test/rules/no-get-raw-id.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
'use strict'
2+
3+
var rule = require('../../lib/rules/no-get-inner-outer-html')
4+
var RuleTester = require('eslint').RuleTester
5+
6+
var eslintTester = new RuleTester()
7+
8+
eslintTester.run('no-get-inner-outer-html', rule, {
9+
valid: [
10+
'expect(element(by.id("myid")).getText()).toEqual("test");',
11+
'getInnerHtml();',
12+
'var html = getOuterHtml();',
13+
'elm.getInnerHTML();',
14+
'elm.getOuterHTML();'
15+
],
16+
17+
invalid: [
18+
{
19+
code: 'expect(element(by.id("myid")).getInnerHtml()).toEqual("test");',
20+
errors: [
21+
{
22+
message: 'Unexpected "getInnerHtml()"'
23+
}
24+
]
25+
},
26+
{
27+
code: 'expect(element(by.id("myid")).getOuterHtml()).toEqual("test");',
28+
errors: [
29+
{
30+
message: 'Unexpected "getOuterHtml()"'
31+
}
32+
]
33+
},
34+
{
35+
code: 'element.all(by.css(".class")).first().getOuterHtml();',
36+
errors: [
37+
{
38+
message: 'Unexpected "getOuterHtml()"'
39+
}
40+
]
41+
},
42+
{
43+
code: 'element(by.id("id")).all(by.css(".class")).last().getInnerHtml();',
44+
errors: [
45+
{
46+
message: 'Unexpected "getInnerHtml()"'
47+
}
48+
]
49+
},
50+
{
51+
code: '$$(".class").first().getOuterHtml();',
52+
errors: [
53+
{
54+
message: 'Unexpected "getOuterHtml()"'
55+
}
56+
]
57+
},
58+
{
59+
code: '$(".class").getInnerHtml().then(function (html) { console.log(html) });',
60+
errors: [
61+
{
62+
message: 'Unexpected "getInnerHtml()"'
63+
}
64+
]
65+
}
66+
]
67+
})

0 commit comments

Comments
 (0)