(При наличии) Выполнить событие Click на кнопке «Войти» на веб-странице - PullRequest
0 голосов
/ 23 октября 2019

Мое требование:

Когда присутствует кнопка «Логин», нажмите кнопку «Логин» и работайте над вариантом использования.
Когда кнопка «Логин» НЕ присутствует, работайте непосредственно над вариантом использования (Не нужно нажимать кнопку «Войти»)

Итак, я написал свой @Test, как показано ниже.

@Test
@Parameters({ "baseURL" })
public void settings_Preferences_Method(String baseURL) {
    SoftAssert assertions = new SoftAssert();       
    goTo_Us_PioneerHomePage(baseURL);
    **goTo_Us_Login(assertions);**
    goTo_Us_Settings("expectedText");
    goTo_Us_Signout(assertions);
    assertions.assertAll();
}

@Step("Login")
public void goTo_Us_Login(SoftAssert assertions) {  
**int elementPresent = isElementPresent(By.xpath((loginXpath)));**
if (elementPresent>0) {    
    writeText(By.xpath(emailAddressXpath),"uat106@gmail.com");
    writeText(By.xpath(passwordXpath),"test$");
    click(By.xpath(signinXpath));
    Assert.assertEquals(readText(By.xpath(v_DashboardXpath)), "expected Text", "User is NOT in Login page");    
}       
}

Используемые методы:

 public void click(By elementLocation) {    
        wait.until(ExpectedConditions.elementToBeClickable(elementLocation));                                         
        driver.findElement(elementLocation).click();    
}

public String readText(By elementLocation) {
    wait.until(ExpectedConditions.visibilityOfElementLocated(elementLocation));
    return driver.findElement(elementLocation).getText();
}

public void writeText(By elementLocation, String text) {
    wait.until(ExpectedConditions.elementToBeClickable(elementLocation));
    driver.findElement(elementLocation).sendKeys(text);
}

public int isElementPresent(By by) {
    wait.until(driver -> driver.findElements(by).size() > 0);**- When driver.findElements(by).size() = 0 , Control is getting out of 'isElementPresent' method and then getting out of 'goTo_Us_Login' method and then getting out of 'settings_Preferences_Method' WITHOUT executing '3 lines of code' specified below**
    return driver.findElements(by).size();
}

Проблема

:

Когда driver.findElements (by) .size() = 0, Control выходит из метода «isElementPresent», затем выходит из метода «goTo_Us_Login», а затем выходит из «settings_Preferences_Method» БЕЗ выполнения «3 строк кода», указанных ниже *

 goTo_Us_Settings("expectedText");                         
 goTo_Us_Signout(assertions);                                             
 assertions.assertAll();

Выше 3 строки кода должны выполняться независимо от значения в driver.findElements (by) .size ()

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Логика для проверки входа в систему или нет:

  1. Ожидание присутствия одного из Вход или Любой элемент на главной странице
  2. Если Логин существует, то войдите
new WebDriverWait(driver, 10).until(d -> d.findElements(By.xpath(loginXpath)).size() > 0 || 
        d.findElements(By.xpath(v_DashboardXpath)).size() > 0);
if (driver.findElements(By.xpath(loginXpath)).size() > 0)  {
    // login here
}
0 голосов
/ 24 октября 2019

Вы не опубликовали свой метод isElementPresent(), поэтому я предполагаю, что именно в этом проблема. Я предполагаю, что вы использовали driver.findElement() вызов там (обратите внимание на единственное число), и он выбрасывает, когда элемент не найден. Вместо этого используйте .findElements() (множественное число) и проверьте наличие пустого списка.

public static boolean isElementPresent(By locator)
{
    return !driver.findElements(locator).isEmpty();
}

Тогда вы будете использовать его как

@Step("Click on Login and verify whether User is in Login Page.")
public void goTo_Us_Login(String expectedText) {        
    if (isElementPresent(By.xpath(loginXpath))) {
        click(By.xpath(loginXpath));
        click(By.xpath(continueXpath));
        writeText(By.xpath(emailAddressXpath),"uat106@gmail.com");
        writeText(By.xpath(passwordXpath),"test$");
        click(By.xpath(signinXpath));
        Assert.assertEquals(readText(By.xpath(v_DashboardXpath)), expectedText, "User is NOT in " + getCallingMethodName().replace("goToUa", "").replace("Page", " Page.\n\n"));
    }
} 
...