1
+ using OpenQA . Selenium ;
2
+ using OpenQA . Selenium . Support . Extensions ;
3
+ using System ;
4
+ using System . Collections . Generic ;
5
+ using System . Collections . ObjectModel ;
6
+ using System . ComponentModel . Design ;
7
+ using System . Drawing . Imaging ;
8
+ using System . Linq ;
9
+ using System . Text ;
10
+ using System . Threading ;
11
+ using System . Threading . Tasks ;
12
+
13
+ namespace Riganti . Utils . Testing . SeleniumCore
14
+ {
15
+ public class BrowserWrapper
16
+ {
17
+ private readonly IWebDriver browser ;
18
+ public IWebDriver Browser => browser ;
19
+
20
+ public BrowserWrapper ( IWebDriver browser )
21
+ {
22
+ this . browser = browser ;
23
+ SetCssSelector ( ) ;
24
+ }
25
+
26
+ private Func < string , By > selectorPreprocessMethod ;
27
+
28
+ public virtual Func < string , By > SelectorPreprocessor
29
+ {
30
+ get { return selectorPreprocessMethod ; }
31
+ set
32
+ {
33
+ if ( value == null )
34
+ { throw new Exception ( "Wrong selector preprocess methode." ) ; }
35
+ selectorPreprocessMethod = value ;
36
+ }
37
+ }
38
+
39
+ public void SetCssSelector ( )
40
+ {
41
+ selectorPreprocessMethod = By . CssSelector ;
42
+ }
43
+
44
+ /// <summary>
45
+ /// Url of active browser tab.
46
+ /// </summary>
47
+ public string CurrentUrl => browser . Url ;
48
+
49
+ /// <summary>
50
+ /// Gives path of url of active browser tab.
51
+ /// </summary>
52
+ public string CurrentUrlPath => new Uri ( CurrentUrl ) . GetLeftPart ( UriPartial . Path ) ;
53
+
54
+ /// <summary>
55
+ /// Compares url with current url of browser.
56
+ /// </summary>
57
+ public bool CompareUrl ( string url )
58
+ {
59
+ Uri uri1 = new Uri ( url ) ;
60
+ Uri uri2 = new Uri ( browser . Url ) ;
61
+
62
+ var result = Uri . Compare ( uri1 , uri2 ,
63
+ UriComponents . Scheme | UriComponents . Host | UriComponents . PathAndQuery ,
64
+ UriFormat . SafeUnescaped , StringComparison . OrdinalIgnoreCase ) ;
65
+
66
+ return result == 0 ;
67
+ }
68
+
69
+ public void Click ( string selector )
70
+ {
71
+ First ( selector ) . Click ( ) ;
72
+ Thread . Sleep ( 100 ) ;
73
+ }
74
+
75
+ public void Submit ( string selector )
76
+ {
77
+ First ( selector ) . Submit ( ) ;
78
+ Thread . Sleep ( 100 ) ;
79
+ }
80
+
81
+ public void NavigateToUrl ( string url )
82
+ {
83
+ browser . Navigate ( ) . GoToUrl ( url ) ;
84
+ }
85
+
86
+ public void NavigateBack ( )
87
+ {
88
+ browser . Navigate ( ) . Back ( ) ;
89
+ }
90
+
91
+ public void NavigateForward ( )
92
+ {
93
+ browser . Navigate ( ) . Forward ( ) ;
94
+ }
95
+
96
+ public void Refresh ( )
97
+ {
98
+ browser . Navigate ( ) . Refresh ( ) ;
99
+ }
100
+
101
+ public string GetAlertText ( )
102
+ {
103
+ var alert = browser . SwitchTo ( ) . Alert ( ) ;
104
+ return alert ? . Text ;
105
+ }
106
+
107
+ public void ConfirmAlert ( )
108
+ {
109
+ browser . SwitchTo ( ) . Alert ( ) . Accept ( ) ;
110
+ Thread . Sleep ( 500 ) ;
111
+ }
112
+
113
+ /// <summary>
114
+ /// Finds all elements that satisfy the condition of css selector.
115
+ /// </summary>
116
+ /// <param name="selector"></param>
117
+ /// <returns></returns>
118
+ public ElementWrapperCollection FindElements ( string selector )
119
+ {
120
+ return browser . FindElements ( SelectorPreprocessor ( selector ) ) . ToElementsList ( this , selector ) ;
121
+ }
122
+
123
+ public ElementWrapper FirstOrDefault ( string selector )
124
+ {
125
+ var elms = FindElements ( selector ) ;
126
+ return elms . FirstOrDefault ( ) ;
127
+ }
128
+
129
+ public ElementWrapper First ( string selector )
130
+ {
131
+ return ThrowIfIsNull ( FirstOrDefault ( selector ) , $ "Element not found. Selector: { selector } ") ;
132
+ }
133
+
134
+ public ElementWrapper SingleOrDefault ( string selector )
135
+ {
136
+ return FindElements ( selector ) . SingleOrDefault ( ) ;
137
+ }
138
+
139
+ public ElementWrapper Single ( string selector )
140
+ {
141
+ return FindElements ( selector ) . Single ( ) ;
142
+ }
143
+
144
+ public ElementWrapper ElementAt ( string selector , int index )
145
+ {
146
+ return FindElements ( selector ) . ElementAt ( index ) ;
147
+ }
148
+
149
+ public ElementWrapper Last ( string selector )
150
+ {
151
+ return FindElements ( selector ) . Last ( ) ;
152
+ }
153
+
154
+ public ElementWrapper LastOrDefault ( string selector )
155
+ {
156
+ return FindElements ( selector ) . LastOrDefault ( ) ;
157
+ }
158
+
159
+ public void Blur ( )
160
+ {
161
+ var jsExecutor = browser as IJavaScriptExecutor ;
162
+ jsExecutor ? . ExecuteScript ( "if(document.activeElement && document.activeElement.blur) {document.activeElement.blur()}" ) ;
163
+ }
164
+
165
+ public void SendKeys ( string selector , string text )
166
+ {
167
+ FindElements ( selector ) . ForEach ( s => s . SendKeys ( text ) ) ;
168
+ }
169
+
170
+ public void ClearElementsContent ( string selector )
171
+ {
172
+ FindElements ( selector ) . ForEach ( s => s . Clear ( ) ) ;
173
+ }
174
+
175
+ public T ThrowIfIsNull < T > ( T obj , string message )
176
+ {
177
+ if ( obj == null )
178
+ {
179
+ throw new NoSuchElementException ( message ) ;
180
+ }
181
+ return obj ;
182
+ }
183
+
184
+ /// <summary>
185
+ /// Takes a screenshot and returns a full path to the file.
186
+ /// </summary>
187
+ ///<param name="filename">Path where the screenshot is going to be saved.</param>
188
+ ///<param name="format">Default value is PNG.</param>
189
+ public void TakeScreenshot ( string filename , ImageFormat format = null )
190
+ {
191
+ ( ( ITakesScreenshot ) browser ) . GetScreenshot ( ) . SaveAsFile ( filename , format ) ;
192
+ }
193
+
194
+ public void Dispose ( )
195
+ {
196
+ browser . Dispose ( ) ;
197
+ }
198
+ }
199
+ }
0 commit comments