def login(): ''' Fonction permettant se récupérer le cookie de session après une connexion via selenium ''' firefoxOptions = FirefoxOptions() #firefoxOptions.addArguments("--window-size=1920,1080") #firefoxOptions.addArguments("--disable-gpu") #firefoxOptions.addArguments("--disable-extensions") #firefoxOptions.addArguments("--proxy-server='direct://'") #firefoxOptions.addArguments("--proxy-bypass-list=*") #firefoxOptions.addArguments("--start-maximized") firefoxOptions.addArguments("--headless") webDriver = FirefoxDriver(firefoxOptions) webDriver.get(URL_LOGIN) timeOut = 3 waiter = WebDriverWait(webDriver, timeOut) waiter.until(ExpectedConditions.visibilityOfElement(By.id("login-form"))) webDriver.findElement(By.name("email")).sendKeys("*****@*****.**") webDriver.findElement(By.name("pass")).sendKeys("123") webDriver.findElement(By.name("login-button")).click() waiter.until(ExpectedConditions.visibilityOfElement(By.id("welcome-page"))) GlobalVariables.setGlobalCustomVar( COOKIE, str(webDriver.manage().getCookieNamed(COOKIE_NAME).getValue()))
def doLogin(helper): firefoxOptions = FirefoxOptions() firefoxOptions.addArguments("--window-size=1920,1080"); firefoxOptions.addArguments("--disable-gpu"); firefoxOptions.addArguments("--disable-extensions"); firefoxOptions.addArguments("--proxy-server='direct://'"); firefoxOptions.addArguments("--proxy-bypass-list=*"); firefoxOptions.addArguments("--start-maximized"); firefoxOptions.addArguments("--headless"); webDriver = FirefoxDriver(firefoxOptions); # generate state and nonce state = generateRandomAlphanumericString(20); nonce = generateRandomAlphanumericString(20); print "state:"+state; print "nonce:"+nonce; #------------getting login page from keycloak------------ loginUrl = KEYCLOAK_BASE_URL+"/realms/"+KEYCLOAK_REALM+"/protocol/openid-connect/auth?client_id=app-angular2&redirect_uri="+ENCODED_APP_ANGULAR_URL+"%2F&state="+state+"&nonce="+nonce+"&response_mode=fragment&response_type=code&scope=openid"; print("loginUrl:"+loginUrl); webDriver.get(loginUrl); # we wait until the username element is visible timeoutInSeconds = 10; wait = WebDriverWait(webDriver, timeoutInSeconds); wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("username"))); loginEle = webDriver.findElement(By.name("username")); formEle = webDriver.findElement(By.id("kc-form-login")); # gathering all the information to make the next http request formActionUrl = formEle.getAttribute("action"); formBody = "username="******"&password="******"&credentialId=" authSessionIdLegacyCookieValue = webDriver.manage().getCookieNamed(AUTH_SESSION_ID_LEGACY_COOKIE_NAME).getValue(); print "authSessionIdLegacyCookieValue: " + authSessionIdLegacyCookieValue; kcRestartCookieValue = webDriver.manage().getCookieNamed(KC_RESTART_COOKIE_NAME).getValue(); print "kcRestartCookieValue: " + kcRestartCookieValue; authSessionIdLegacyCookie = HttpCookie(AUTH_SESSION_ID_LEGACY_COOKIE_NAME, authSessionIdLegacyCookieValue); kcRestartCookie = HttpCookie(KC_RESTART_COOKIE_NAME, kcRestartCookieValue); cookies = [authSessionIdLegacyCookie, kcRestartCookie]; #----------------------------------------------------- #------------submitting login credentials to keycloak------------ returnedMsg = callPost(formActionUrl, formBody, {}, cookies, "application/x-www-form-urlencoded", helper); keyCloakIdentityLegacyCookieValue = returnedMsg.getResponseHeader().getHeader(KEYCLOAK_IDENTITY_LEGACY_COOKIE_NAME) keyCloakSessionLegacyCookieValue = returnedMsg.getResponseHeader().getHeader(KEYCLOAK_SESSION_LEGACY_COOKIE_NAME); # we will get a redirect response whose url in the 'location' header we will need to call manually below to get the token # we cannot use selenium at this stage as it will do auto redirect and we will miss the information returned by the redirect response location = returnedMsg.getResponseHeader().getHeader("Location"); print "location: " + location; codeQueryParamValue = getUrlQueryParamValue(location, "code"); print("code:" + codeQueryParamValue); tokenUrl = KEYCLOAK_BASE_URL+"/realms/"+KEYCLOAK_REALM+"/protocol/openid-connect/token" formBody = "code="+codeQueryParamValue+"&grant_type=authorization_code&client_id=app-angular2&redirect_uri="+ENCODED_APP_ANGULAR_URL+"%2F"; keyCloakIdentityLegacyCookie = HttpCookie(KEYCLOAK_IDENTITY_LEGACY_COOKIE_NAME, keyCloakIdentityLegacyCookieValue); keyCloakSessionLegacyCookie = HttpCookie(KEYCLOAK_SESSION_LEGACY_COOKIE_NAME, keyCloakSessionLegacyCookieValue); cookies = [authSessionIdLegacyCookie, keyCloakIdentityLegacyCookie, keyCloakSessionLegacyCookie]; #----------------------------------------------------- #-----------calling the url in the 'location' header to get the access token----------- returnedMsg = callPost(tokenUrl, formBody, {}, cookies, "application/x-www-form-urlencoded", helper); authenticatedJsonResponseObject = json.loads(str(returnedMsg.getResponseBody())); accessToken = authenticatedJsonResponseObject.get("access_token"); accessTokenExpiryInSeconds = authenticatedJsonResponseObject.get("expires_in"); print "accessToken:"+str(accessToken); print "accessTokenExpiryInSeconds:"+str(accessTokenExpiryInSeconds); return dict({"accessToken": accessToken, "accessTokenExpiryInSeconds": accessTokenExpiryInSeconds})
public class Form { public static void main(String[] args) { // declaration and instantiation of objects/variables System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); String baseUrl = "http://demo.guru99.com/test/login.html"; driver.get(baseUrl); // Get the WebElement corresponding to the Email Address(TextField) WebElement email = driver.findElement(By.id("email")); // Get the WebElement corresponding to the Password Field WebElement password = driver.findElement(By.name("passwd")); email.sendKeys("*****@*****.**"); password.sendKeys("abcdefghlkjl"); System.out.println("Text Field Set"); // Deleting values in the text box email.clear(); password.clear(); System.out.println("Text Field Cleared"); // Find the submit button WebElement login = driver.findElement(By.id("SubmitLogin")); // Using click method to submit form email.sendKeys("*****@*****.**");