Selenium сообщение об ошибке и сообщение об успехе в Java - PullRequest
0 голосов
/ 16 ноября 2018

У меня проблема с поиском несуществующего элемента. Когда я пытаюсь войти в приложение, в случае неудачного входа он покажет элемент -

dr.findElement(By.className("message-error ")).getText();

И после успешного входа в систему он покажет это:

dr.findElement(By.className("message-success")).getText();

Когда я запускаю код и он не находит элемент, выполнение останавливается с исключением: element is not found

String mes=null;        

mes=dr.findElement(By.className("message-success")).getText();
if(mes!=null) {
    File out= new File("success.txt");
    FileWriter fr =new FileWriter(out,true);
    PrintWriter pw=new PrintWriter(fr);
    pw.println(mes+"|"+user.get(i)+"|"+pass.get(i));
    pw.close();
}

    mes=dr.findElement(By.className("message-error")).getText();
    if(mes!=null) {
        File out= new File("error.txt");
        FileWriter fr =new FileWriter(out,true);
        PrintWriter pw=new PrintWriter(fr);
        pw.println(mes+"|"+user.get(i)+"|"+pass.get(i));
        pw.close();
    }

Элемент не появляется.

Например, элемент успеха не будет отображаться до тех пор, пока он не будет успешным, а элемент ошибки не появится в CSS, пока не получит ошибку.

Так, как я могу сказать, должен ли элемент выходить из жизни, появляться или появляться, совершать ли действие?

Как правильно поступить в операторе if, если вход выполнен успешно? Сделать это и войти не в систему, сделать это?

Ответы [ 4 ]

0 голосов
/ 17 ноября 2018

это ответ на вопрос, как он работает со мной

    try {
    WebElement sucmes=dr.findElement(By.xpath("//div[@class='message']"));
    String suclogin="login success:";
    if(sucmes.getText().contains(suclogin)) {
    File suclogin= new File("suclog.txt");
                FileWriter suclogr =new FileWriter(suclogin,true);
                PrintWriter suclogrw=new PrintWriter(suclogr);
                suclogrw.println(sucmes.getText());
                suclogrw.close();
            }else{
//the other action here 
}
    }
0 голосов
/ 16 ноября 2018

То, что я думаю, это то, что у вас есть тот же элемент, но класс получает изменения в соответствии с поведением приложения.Предположим, что если вы можете войти в приложение, оно покажет элемент сообщения с классом, имеющим атрибут message-success, а если это не будет разрешено, то сообщение об ошибке с классом, имеющим атрибут 'message-error' в том же элементе.

Я обработал то же самое в приведенном ниже коде -

// first get the message element with some other locator or other attribute (don't use class name)

WebElement message = driver.findElement(By.locator);

if(message.getAttribute("class").contains("message-success")){

    System.out.println("Success message is " + message.getText())        
    // write the code to perform further action you want on login success

}else if (message.getAttribute("class").contains("message-error")){

    System.out.println("Error message is " + message.getText())  
    // write the code to perform further action you want on login Fail

}else{

    System.out.println("Message is empty" + message.getText())
}

Дайте мне знать, если у вас есть дополнительные вопросы.

0 голосов
/ 16 ноября 2018

Мой выбор - использовать ожидание Webdriver.это идеальный способ найти элемент.

    public WebDriverWait(WebDriver driver,15)
    WebElement successmessage = wait.until(ExpectedConditions.visibilityOfallElementLocatedby(By.className("message-success")));
   sucessmessage.getText();

visibilityOfallElementLocatedby:

Ожидание проверки того, что все элементы, присутствующие на веб-странице, которые соответствуют локатору,видимый.Видимость означает, что элементы не только отображаются, но и имеют высоту и ширину, превышающие 0.

Выше я написал для сообщения об успехе, аналогичным образом попробуйте при неверном входе.

Чтобы использовать различные типы ожидания, проверьте этот документ - https://seleniumhq.github.io/selenium/docs/api/java/allclasses-noframe.html

search Wait в этом документе.

0 голосов
/ 16 ноября 2018

Используйте WebdriverWait, чтобы дождаться появления сообщения об успехе,

 // After  valid login 
  WebDriverWait wait = new WebDriverWait(driver, 60);
  WebElement successmessage wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("message-success")));
  sucessmessage.getText();

Аналогично для сообщения об ошибке,

// After  invalid login
 WebElement errormessage wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("message-error")));
 errormessage.getText();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...