在我的项目中,如果我单击那些不同的数据集并尝试删除它们,我将收到两种类型的警报:两种类型的警报:一种数据被“成功删除”,其他数据显示为“数据无法删除”弹出窗口。如何在Selenium中处理这两个问题?
我使用if-else语句使用getText()
方法比较了两个webelement字符串,但显示的是NoSuchElementException
。
这是我的代码:
WebElement Popup = driver.findElement(By.Xpath="//input[@class='btn-btn-popup']")
WebElement e = driver.findElement(By.xpath="//div[@text='Deleted successfully']");
String Deletepopup = e.getText();
WebElement f = driver.findElement(By.xpath="//div[@text='Data Cannot be deleted']");
String CannotDeltedPopup = f.getText();
if (Deletepopup.equals("Deleted Successfully")) {
Popup.click();
}
else if (CannotDeletedPopup.equals("Data Cannot be deleted")) {
Popup.click();
}
答案 0 :(得分:0)
您当然会得到NoSuchElementException
。您尝试找到两个WebElement,但是一次只能显示一个。
如果您的操作成功,您将获得此提示
driver.findElement(By.xpath("//div[@text='Deleted successfully']"))
和此driver.findElement(By.xpath("//div[@text='Data Cannot be deleted']"))
会抛出NoSuchElementException
,反之亦然,否则操作失败。
根据您的情况,我建议您使用try-catch
块。
String txt;
try{
txt = driver.findElement(By.xpath("//div[@text='Deleted successfully']")).getText();
}catch(NoSuchElementException e){
try{
txt = driver.findElement(By.xpath("//div[@text='Data Cannot be deleted']")).getText();
}catch(NoSuchElementException e1){
txt = "None of messages was found"; //this will happend when none of elements are present.
}
}
在这种情况下,您将尝试查找“成功删除”消息,如果不存在,将尝试查找“无法删除数据”消息。
我也建议您使用Explicit Wait,以便在抛出NoSuchElementException
之前给您的应用一些时间来寻找您的元素。
String txt;
try{
WebDriverWait wait=new WebDriverWait(driver, 10);
txt = wait.until(ExpectedConditions.visibilityOfElementLocated(
By.xpath("//div[@text='Deleted successfully']"))
).getText();
}catch(NoSuchElementException e){
try{
WebDriverWait wait=new WebDriverWait(driver, 10);
txt = wait.until(ExpectedConditions.visibilityOfElementLocated(
By.xpath("//div[@text='Data Cannot be deleted']"))
).getText();
}catch(NoSuchElementException e1){
txt = "None of messages was found"; //this will happend when none of elements are present.
}
}
在抛出NoSuchElementException
之前,这将有10秒钟的时间来查找元素。您可以将此时间更改为增加应用程序成功所需的时间。