我在查找不存在的元素时遇到了问题。当我尝试登录该应用程序时,如果登录失败,它将显示元素-
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语句中该怎么做?这样做并登录失败吗?
答案 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)