001/* 002 Licensed to the Apache Software Foundation (ASF) under one 003 or more contributor license agreements. See the NOTICE file 004 distributed with this work for additional information 005 regarding copyright ownership. The ASF licenses this file 006 to you under the Apache License, Version 2.0 (the 007 "License"); you may not use this file except in compliance 008 with the License. You may obtain a copy of the License at 009 010 http://www.apache.org/licenses/LICENSE-2.0 011 012 Unless required by applicable law or agreed to in writing, 013 software distributed under the License is distributed on an 014 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 KIND, either express or implied. See the License for the 016 specific language governing permissions and limitations 017 under the License. 018 */ 019package org.apache.wiki.pages.haddock; 020 021import org.apache.wiki.pages.Page; 022import org.openqa.selenium.By; 023 024import com.codeborne.selenide.Condition; 025import com.codeborne.selenide.Selenide; 026import com.codeborne.selenide.SelenideElement; 027 028import java.time.Duration; 029 030/** 031 * Actions available on the View page. 032 */ 033public class ViewWikiPage implements HaddockPage { 034 035 /** 036 * Open a given page for view. 037 * 038 * @param pageName Wiki page name to View. 039 * @return {@link ViewWikiPage} instance, to allow chaining of actions. 040 */ 041 public static ViewWikiPage open(final String pageName ) { 042 return Page.withUrl( Page.baseUrl() + "/Wiki.jsp?page=" + pageName ).openAs( new ViewWikiPage() ); 043 } 044 045 /** 046 * Returns the authenticated user text. 047 * 048 * @return the authenticated user text. 049 */ 050 public String authenticatedText() { 051 return Selenide.$( By.className( "wikipage" ) ).text().trim(); 052 } 053 054 /** 055 * Clicks on the login button. 056 * 057 * @return {@link LoginPage} instance, to allow chaining of actions. 058 */ 059 public LoginPage clickOnLogin() { 060 hoverLoginArea(); 061 Selenide.$( By.className( "icon-signin" ) ).click(); 062 return new LoginPage(); 063 } 064 065 /** 066 * Clicks on the show reader view link. 067 * 068 * @return {@link ViewWikiPage} instance, to allow chaining of actions. 069 */ 070 public ViewWikiPage clickOnShowReaderView() { 071 Selenide.$( By.linkText( "Show Reader View" ) ).click(); 072 return this; 073 } 074 075 /** 076 * Hover's the user's icon, so the login area gets visible. 077 * 078 * @return {@link ViewWikiPage} instance, to allow chaining of actions. 079 */ 080 public ViewWikiPage hoverLoginArea() { 081 Selenide.$( By.className( "icon-user" ) ).hover(); 082 return this; 083 } 084 085 /** 086 * Hover's the More tab, making its associated pane visible. 087 * 088 * @return {@link ViewWikiPage} instance, to allow chaining of actions. 089 */ 090 public ViewWikiPage hoverMoreArea() { 091 Selenide.$( By.id( "more" ) ).hover(); 092 return this; 093 } 094 095 /** 096 * Clicks the edit link. 097 * 098 * @return {@link EditWikiPage} instance, to allow chaining of actions. 099 */ 100 public EditWikiPage editPage() { 101 Selenide.$( By.cssSelector( "li#edit a" ) ).shouldBe( Condition.visible, Duration.ofSeconds( 1L ) ).click(); 102 return new EditWikiPage(); 103 } 104 105 /** 106 * Searches for a given text. 107 * 108 * @param text text to search for. 109 * @return {@link SearchResultsPage} instance, to allow chaining of actions. 110 */ 111 public SearchResultsPage searchFor( final String text ) { 112 Selenide.$( By.id( "searchForm" ) ).hover(); 113 Selenide.$( By.id( "query" ) ).click(); 114 Selenide.$( By.id( "query" ) ).val( text ); 115 Selenide.$( By.id( "searchSubmit" ) ).click(); 116 return new SearchResultsPage(); 117 } 118 119 /** 120 * Logs the user out. 121 * 122 * @return {@link ViewWikiPage} instance, to allow chaining of actions. 123 */ 124 public ViewWikiPage clickOnLogout() { 125 hoverLoginArea(); 126 Selenide.$( By.linkText( "Log out" ) ).click(); 127 Selenide.$( By.className( "btn-success" ) ).shouldBe( Condition.visible, Duration.ofSeconds( 1L ) ).click(); 128 return this; 129 } 130 131 /** 132 * Navigates to a given view page. 133 * 134 * @param wikiPageName wikipage name to navigate to. 135 * @return {@link ViewWikiPage} instance, to allow chaining of actions. 136 */ 137 public ViewWikiPage navigateTo(final String wikiPageName ) { 138 Selenide.$( By.linkText( wikiPageName ) ).click(); 139 return this; 140 } 141 142 /** 143 * Returns the sidebar element. 144 * 145 * @return the sidebar element. 146 */ 147 public SelenideElement sidebar() { 148 return Selenide.$( By.className( "sidebar" ) ); 149 } 150 151}