1+ package  com .example .webdriver ;
2+ 
3+ import  org .junit .jupiter .api .Assertions ;
4+ import  org .junit .jupiter .api .Test ;
5+ import  org .openqa .selenium .By ;
6+ import  org .openqa .selenium .NoSuchElementException ;
7+ import  org .openqa .selenium .WebDriver ;
8+ import  org .openqa .selenium .WebElement ;
9+ import  org .openqa .selenium .support .FindBy ;
10+ import  org .openqa .selenium .support .PageFactory ;
11+ import  org .openqa .selenium .support .ui .LoadableComponent ;
12+ 
13+ public  class  EditIssue  {
14+ 
15+   private  final  WebDriver  driver ;
16+ 
17+   public  EditIssue (WebDriver  driver ) {
18+     this .driver  = driver ;
19+   }
20+ 
21+   public  void  setTitle (String  title ) {
22+     WebElement  field  = driver .findElement (By .id ("issue_title" ));
23+     clearAndType (field , title );
24+   }
25+ 
26+   public  void  setBody (String  body ) {
27+     WebElement  field  = driver .findElement (By .id ("issue_body" ));
28+     clearAndType (field , body );
29+   }
30+ 
31+   public  void  setHowToReproduce (String  howToReproduce ) {
32+     WebElement  field  = driver .findElement (By .id ("issue_form_repro-command" ));
33+     clearAndType (field , howToReproduce );
34+   }
35+ 
36+   public  void  setLogOutput (String  logOutput ) {
37+     WebElement  field  = driver .findElement (By .id ("issue_form_logs" ));
38+     clearAndType (field , logOutput );
39+   }
40+ 
41+   public  void  setOperatingSystem (String  operatingSystem ) {
42+     WebElement  field  = driver .findElement (By .id ("issue_form_operating-system" ));
43+     clearAndType (field , operatingSystem );
44+   }
45+ 
46+   public  void  setSeleniumVersion (String  seleniumVersion ) {
47+     WebElement  field  = driver .findElement (By .id ("issue_form_selenium-version" ));
48+     clearAndType (field , seleniumVersion );
49+   }
50+ 
51+   public  void  setBrowserVersion (String  browserVersion ) {
52+     WebElement  field  = driver .findElement (By .id ("issue_form_browser-versions" ));
53+     clearAndType (field , browserVersion );
54+   }
55+ 
56+   public  void  setDriverVersion (String  driverVersion ) {
57+     WebElement  field  = driver .findElement (By .id ("issue_form_browser-driver-versions" ));
58+     clearAndType (field , driverVersion );
59+   }
60+ 
61+   public  void  setUsingGrid (String  usingGrid ) {
62+     WebElement  field  = driver .findElement (By .id ("issue_form_selenium-grid-version" ));
63+     clearAndType (field , usingGrid );
64+   }
65+ 
66+   public  IssueList  submit () {
67+     driver .findElement (By .cssSelector ("button[type='submit']" )).click ();
68+     return  new  IssueList (driver );
69+   }
70+ 
71+   private  void  clearAndType (WebElement  field , String  text ) {
72+     field .clear ();
73+     field .sendKeys (text );
74+   }
75+ }
76+ 
77+ public  class  IssueList  extends  LoadableComponent <IssueList > {
78+     private  final  WebDriver  driver ;
79+ 
80+     public  IssueList (WebDriver  driver ) {
81+         this .driver  = driver ;
82+     }
83+ 
84+ }
85+ 
86+ public  class  EditIssueBetter  extends  LoadableComponent <EditIssue > {
87+ 
88+   private  final  WebDriver  driver ;
89+   
90+   // By default the PageFactory will locate elements with the same name or id 
91+   // as the field. Since the issue_title element has an id attribute of "issue_title" 
92+   // we don't need any additional annotations. 
93+   private  WebElement  issue_title ;
94+   
95+   // But we'd prefer a different name in our code than "issue_body", so we use the 
96+   // FindBy annotation to tell the PageFactory how to locate the element. 
97+   @ FindBy (id  = "issue_body" ) private  WebElement  body ;
98+   
99+   public  EditIssueBetter (WebDriver  driver ) {
100+     this .driver  = driver ;
101+     
102+     // This call sets the WebElement fields. 
103+     PageFactory .initElements (driver , this );
104+   }
105+ 
106+   @ Override 
107+   protected  void  load () {
108+     driver .get ("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+" );
109+   }
110+ 
111+   @ Override 
112+   protected  void  isLoaded () throws  Error  {
113+     String  url  = driver .getCurrentUrl ();
114+     Assertions .assertTrue (url .endsWith ("/new" ), "Not on the issue entry page: "  + url );
115+   }
116+ 
117+   public  void  setHowToReproduce (String  howToReproduce ) {
118+     WebElement  field  = driver .findElement (By .id ("issue_form_repro-command" ));
119+     clearAndType (field , howToReproduce );
120+   }
121+ 
122+   public  void  setLogOutput (String  logOutput ) {
123+     WebElement  field  = driver .findElement (By .id ("issue_form_logs" ));
124+     clearAndType (field , logOutput );
125+   }
126+ 
127+   public  void  setOperatingSystem (String  operatingSystem ) {
128+     WebElement  field  = driver .findElement (By .id ("issue_form_operating-system" ));
129+     clearAndType (field , operatingSystem );
130+   }
131+ 
132+   public  void  setSeleniumVersion (String  seleniumVersion ) {
133+     WebElement  field  = driver .findElement (By .id ("issue_form_selenium-version" ));
134+     clearAndType (field , seleniumVersion );
135+   }
136+ 
137+   public  void  setBrowserVersion (String  browserVersion ) {
138+     WebElement  field  = driver .findElement (By .id ("issue_form_browser-versions" ));
139+     clearAndType (field , browserVersion );
140+   }
141+ 
142+   public  void  setDriverVersion (String  driverVersion ) {
143+     WebElement  field  = driver .findElement (By .id ("issue_form_browser-driver-versions" ));
144+     clearAndType (field , driverVersion );
145+   }
146+ 
147+   public  void  setUsingGrid (String  usingGrid ) {
148+     WebElement  field  = driver .findElement (By .id ("issue_form_selenium-grid-version" ));
149+     clearAndType (field , usingGrid );
150+   }
151+ 
152+   public  IssueList  submit () {
153+     driver .findElement (By .cssSelector ("button[type='submit']" )).click ();
154+     return  new  IssueList (driver );
155+   }
156+ 
157+   private  void  clearAndType (WebElement  field , String  text ) {
158+     field .clear ();
159+     field .sendKeys (text );
160+   }
161+ }
162+ 
163+ public  class  ProjectPage  extends  LoadableComponent <ProjectPage > {
164+ 
165+   private  final  WebDriver  driver ;
166+   private  final  String  projectName ;
167+ 
168+   public  ProjectPage (WebDriver  driver , String  projectName ) {
169+     this .driver  = driver ;
170+     this .projectName  = projectName ;
171+   }
172+ 
173+   @ Override 
174+   protected  void  load () {
175+     driver .get ("http://"  + projectName  + ".googlecode.com/" );
176+   }
177+ 
178+   @ Override 
179+   protected  void  isLoaded () throws  Error  {
180+     String  url  = driver .getCurrentUrl ();
181+ 
182+     Assertions .assertTrue (url .contains (projectName ));
183+   }
184+ }
185+ 
186+ public  class  SecuredPage  extends  LoadableComponent <SecuredPage > {
187+ 
188+   private  final  WebDriver  driver ;
189+   private  final  LoadableComponent <?> parent ;
190+   private  final  String  username ;
191+   private  final  String  password ;
192+ 
193+   public  SecuredPage (WebDriver  driver , LoadableComponent <?> parent , String  username , String  password ) {
194+     this .driver  = driver ;
195+     this .parent  = parent ;
196+     this .username  = username ;
197+     this .password  = password ;
198+   }
199+ 
200+   @ Override 
201+   protected  void  load () {
202+     parent .get ();
203+ 
204+     String  originalUrl  = driver .getCurrentUrl ();
205+ 
206+     // Sign in 
207+     driver .get ("https://www.google.com/accounts/ServiceLogin?service=code" );
208+     driver .findElement (By .name ("Email" )).sendKeys (username );
209+     WebElement  passwordField  = driver .findElement (By .name ("Passwd" ));
210+     passwordField .sendKeys (password );
211+     passwordField .submit ();
212+ 
213+     // Now return to the original URL 
214+     driver .get (originalUrl );
215+   }
216+ 
217+   @ Override 
218+   protected  void  isLoaded () throws  Error  {
219+     // If you're signed in, you have the option of picking a different login. 
220+     // Let's check for the presence of that. 
221+ 
222+     try  {
223+       WebElement  div  = driver .findElement (By .id ("multilogin-dropdown" ));
224+     } catch  (NoSuchElementException  e ) {
225+       Assertions .fail ("Cannot locate user name link" );
226+     }
227+   }
228+ }
229+ 
230+ // public class FooTest { 
231+ //   private EditIssue editIssue; 
232+ 
233+ //   @Before 
234+ //   public void prepareComponents() { 
235+ //     WebDriver driver = new FirefoxDriver(); 
236+ 
237+ //     ProjectPage project = new ProjectPage(driver, "selenium"); 
238+ //     SecuredPage securedPage = new SecuredPage(driver, project, "example", "top secret"); 
239+ //     editIssue = new EditIssue(driver, securedPage); 
240+ //   } 
241+ 
242+ //   @Test 
243+ //   public void demonstrateNestedLoadableComponents() { 
244+ //     editIssue.get(); 
245+ 
246+ //     editIssue.title.sendKeys('Title'); 
247+ //     editIssue.body.sendKeys('What Happened'); 
248+ //     editIssue.setHowToReproduce('How to Reproduce'); 
249+ //     editIssue.setLogOutput('Log Output'); 
250+ //     editIssue.setOperatingSystem('Operating System'); 
251+ //     editIssue.setSeleniumVersion('Selenium Version'); 
252+ //     editIssue.setBrowserVersion('Browser Version'); 
253+ //     editIssue.setDriverVersion('Driver Version'); 
254+ //     editIssue.setUsingGrid('I Am Using Grid'); 
255+ //   } 
256+ 
257+ // } 
258+ 
259+ public  class  ActionBot  {
260+   private  final  WebDriver  driver ;
261+ 
262+   public  ActionBot (WebDriver  driver ) {
263+     this .driver  = driver ;
264+   }
265+ 
266+   public  void  click (By  locator ) {
267+     driver .findElement (locator ).click ();
268+   }
269+ 
270+   public  void  submit (By  locator ) {
271+     driver .findElement (locator ).submit ();
272+   }
273+ 
274+   /**  
275+    * Type something into an input field. WebDriver doesn't normally clear these 
276+    * before typing, so this method does that first. It also sends a return key 
277+    * to move the focus out of the element. 
278+    */ 
279+   public  void  type (By  locator , String  text ) { 
280+     WebElement  element  = driver .findElement (locator );
281+     element .clear ();
282+     element .sendKeys (text  + "\n " );
283+   }
284+ }
0 commit comments