Java中的硒消息错误和消息成功

时间:2018-11-15 22:00:01

标签: java selenium selenium-webdriver automated-tests

我在查找不存在的元素时遇到了问题。当我尝试登录该应用程序时,如果登录失败,它将显示元素-

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 :(得分:0)

使用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();

答案 1 :(得分:0)

我认为您具有相同的元素,但是类会根据应用程序的行为进行更改。假设如果您能够登录应用程序,那么它将显示具有属性message-success的类的message元素,如果不允许,则在同一元素中显示具有属性'message-error'的错误消息。 / p>

我已经在下面的代码中处理了相同的内容-

// 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())
}

如果您有其他疑问,请告诉我。

答案 2 :(得分:0)

我的选择是使用Webdriver等待。这是查找元素的完美方法。

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

visibilityOfallElementLocated by:

期望检查网页上与定位器匹配的所有元素是否可见。可见性意味着不仅显示元素,而且其高度和宽度都大于0。

我上面写的是成功消息,以类似的方式尝试无效登录。

要使用其他类型的等待,请查看此文档-https://seleniumhq.github.io/selenium/docs/api/java/allclasses-noframe.html

搜索等待该文档。

答案 3 :(得分:0)

这是与我一起工作的问题的答案

 def index():

        rng = pd.date_range('1/1/2011', periods=7500, freq='H')
        ts = pd.Series(np.random.randn(len(rng)), index=rng)

        graphs = [

            dict(
                data=[
                    dict(
                        x=[1, 2, 3],
                        y= arr,
                        type='scatter'
                    ),
                ],
                layout=dict(
                    title='first graph'
                )
            ) 

        ]


        ids = ['graph-{}'.format(i) for i, _ in enumerate(graphs)]
        graphJSON = json.dumps(graphs, cls=plotly.utils.PlotlyJSONEncoder)

        return render_template('index.html',
                               ids=ids,
                               graphJSON=graphJSON)