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