Как проверить определенный веб-элемент на другой странице в модуле входа - PullRequest
0 голосов
/ 26 марта 2019

В моем приложении при первом входе пользователя в систему, а затем на первой странице отображается имя пользователя (управляемый данными подход с использованием @factory).Но если пользователь выходит из системы и снова входит в систему, то появляются новые страницы со следующим текстом.

You're signed out now.
Click here to sign in again.

Мой вопрос заключается в том, как проверить, присутствует ли этот текст - «Нажмите здесь», затем щелкните по нему и выполните те же действия.как упоминалось в функции входа в систему.

Я попытался реализовать блок if-else, чтобы проверить, отображается ли этот веб-элемент, затем щелкните по нему и выполните то же действие, что и в функции входа в систему.Но выдает ошибку, что

org.openqa.selenium.NoSuchElementException: Cannot locate an element using xpath=//a[@href='/Account/Login']
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html

Хотя я успешно могу достичь своего результата, указав этот элемент для нажатия в функции выхода из системы.Но когда, наконец, мой тест заканчивается, он всегда нажимает на него.

 @FindBy(xpath="//a[@href='/Account/Login']")
WebElement clickHere;

// функция для проверки

if (clickHere.isDisplayed())
      {   
          clickHere.click();
          username.sendKeys(strUsername);
          nextBtn.click();
          password.sendKeys(strPassword);
          loginButton.click();
          System.out.println("Successfully Logged");
      }
      else
          {

          username.sendKeys(strUsername);
          nextBtn.click();
          password.sendKeys(strPassword);
          loginButton.click();
          System.out.println("Successfully Logged");
          }

Пожалуйста, предложите решение для проверки в функции входа в систему каждый раз.

Ответы [ 3 ]

1 голос
/ 26 марта 2019

clickHere.isDisplayed() дает NoSuchElementException, поскольку элемент отсутствует в пользовательском интерфейсе, в котором вы пытаетесь его найти.
Итак, для решения вашей проблемы вы можете получить список элементов через pagefactory, а затемМожно найти размер этого списка, если размер больше 0, это означает, что элемент присутствует на странице, иначе элемент отсутствует.

Вам необходимо внести следующие изменения в свой код, и тогда он будет работать нормально:
Вам нужно получить список элементов, используя:

@FindAllBy(xpath="//a[@href='/Account/Login']")
List<WebElement> clickHere;

И внести следующие изменения вваш код:

if (clickHere.size()>0){   
      clickHere.get(0).click();
      username.sendKeys(strUsername);
      nextBtn.click();
      password.sendKeys(strPassword);
      loginButton.click();
      System.out.println("Successfully Logged");
 }
 else{
      username.sendKeys(strUsername);
      nextBtn.click();
      password.sendKeys(strPassword);
      loginButton.click();
      System.out.println("Successfully Logged");
 }
0 голосов
/ 26 марта 2019

Вы можете создать для вас BaseClass PageObject и метод Impelent isElementOnPage

Базовый класс:

public class BasePage {

    private WebDriver driver;

    public BasePage(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    protected boolean isElementOnPage(WebElement webElement) {
        try {
            webElement.getTagName();
        } catch (Exception e) {
            return false;
        }
        return true;
    }
}

Ваш класс:

public class PageClass extends BasePage {

    @FindBy(xpath="//a[@href='/Account/Login']")
    private WebElement clickHere;

    public PageClass(WebDriver driver) {
        super(driver);
    }

    public PageClass YourMethod(){
        if(isElementOnPage(clickHere)){
            clickHere.click();
            // your logic here
        }else {
            // your logic here
        }

        return this;
    }
}
0 голосов
/ 26 марта 2019

Заменить (clickHere.isDisplayed()) на следующее.

if(driver.findElements(By.xpath("//a[@href='/Account/Login']") ).size() != 0)

если вы хотите придерживаться своей страницы, то вы можете использовать следующий подход

// below line will click on the "Click Here" link if only it's present
try {clickHere.click();}catch(Exception e) {}
username.sendKeys(strUsername);
nextBtn.click();
password.sendKeys(strPassword);
loginButton.click();
System.out.println("Successfully Logged");

если вы хотите поймать только исключение NoSuchElementPresent, вы можете обновить его, чтобы поймать только это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...