org.openqa.selenium.NoSuchElementException:没有这样的元素:无法在 selenium 中定位元素,java 使用 TestNG
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element in selenium, java using TestNG
我有一个场景,页面将我带到一个屏幕,屏幕上有一条消息,比如功能未启用。因此你在这里。
然后我需要导航到设置页面并必须启用它并重新加载表单以验证 Web 元素。
最初一切都很好,第二次是我 运行 代码。我没有遇到过这样的元素异常。
因为该设置最初是禁用的,它已通过自动脚本启用,现在已启用,我可以看到表单元素。只有在找到元素时我才必须执行系统设置代码,否则我必须跳过代码。
我尝试了下面的方法,但我仍然没有找到这样的元素错误
if(driver.findElement(By.id("ViewErrorMessage")) != null) {
String errorMsg = driver.findElement(By.xpath("//*[@id=\"ctl00_pnlViewErrorMessage\"]")).getText();
Assert.assertEquals(errorMsg, "Form is disabled, Hence you are here. Enable the form");
//system setting code
driver.findElement(By.xpath("//input[@name='btnSignin']")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//img[@id='imgLogo']")).isDisplayed();
}else{
//code to verify form elements goes here..
}
if条件报错。
当找不到元素时,我假设它必须执行 else 循环,但它总是在同一点失败。谁能帮忙。
当驱动程序找不到元素时,它会抛出 NoSuchElementFound 异常。您可以将 findElement 包装在 try catch 中以查看该元素是否存在或使用 isEmpty 方法。
boolean isElementPresent=true;
try
{
driver.findElement(By.id("ViewErrorMessage"));
}
catch
{
isElementPresent=false;
}
if(isElementPresent) {
String errorMsg = driver.findElement(By.xpath("//*[@id=\"ctl00_pnlViewErrorMessage\"]")).getText();
Assert.assertEquals(errorMsg, "Form is disabled, Hence you are here. Enable the form");
//system setting code
driver.findElement(By.xpath("//input[@name='btnSignin']")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//img[@id='imgLogo']")).isDisplayed();
}else{
//code to verify form elements goes here..
}
或者你可以这样做
if(!driver.findElements(By.id("ViewErrorMessage")).isEmpty()) {
String errorMsg = driver.findElement(By.xpath("//*[@id=\"ctl00_pnlViewErrorMessage\"]")).getText();
Assert.assertEquals(errorMsg, "Form is disabled, Hence you are here. Enable the form");
//system setting code
driver.findElement(By.xpath("//input[@name='btnSignin']")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//img[@id='imgLogo']")).isDisplayed();
}else{
//code to verify form elements goes here..
}
请尝试在 if 条件下显示 is,希望对您有所帮助:
if(driver.findElement(By.id("ViewErrorMessage").isDisplayed()) {
String errorMsg = driver.findElement(By.xpath("//*[@id=\"ctl00_pnlViewErrorMessage\"]")).getText();
Assert.assertEquals(errorMsg, "Form is disabled, Hence you are here. Enable the form");
//system setting code
driver.findElement(By.xpath("//input[@name='btnSignin']")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//img[@id='imgLogo']")).isDisplayed();
}else{
//code to verify form elements goes here..
}
或在下方使用
String s1 = "Error message";
String s2 = driver.findElement(By.id("ViewErrorMessage").getText());
if(s1 == s2) {
String errorMsg = driver.findElement(By.xpath("//*[@id=\"ctl00_pnlViewErrorMessage\"]")).getText();
Assert.assertEquals(errorMsg, "Form is disabled, Hence you are here. Enable the form");
//system setting code
driver.findElement(By.xpath("//input[@name='btnSignin']")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//img[@id='imgLogo']")).isDisplayed();
}else{
//code to verify form elements goes here..
}
我有一个场景,页面将我带到一个屏幕,屏幕上有一条消息,比如功能未启用。因此你在这里。 然后我需要导航到设置页面并必须启用它并重新加载表单以验证 Web 元素。
最初一切都很好,第二次是我 运行 代码。我没有遇到过这样的元素异常。 因为该设置最初是禁用的,它已通过自动脚本启用,现在已启用,我可以看到表单元素。只有在找到元素时我才必须执行系统设置代码,否则我必须跳过代码。
我尝试了下面的方法,但我仍然没有找到这样的元素错误
if(driver.findElement(By.id("ViewErrorMessage")) != null) {
String errorMsg = driver.findElement(By.xpath("//*[@id=\"ctl00_pnlViewErrorMessage\"]")).getText();
Assert.assertEquals(errorMsg, "Form is disabled, Hence you are here. Enable the form");
//system setting code
driver.findElement(By.xpath("//input[@name='btnSignin']")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//img[@id='imgLogo']")).isDisplayed();
}else{
//code to verify form elements goes here..
}
if条件报错。 当找不到元素时,我假设它必须执行 else 循环,但它总是在同一点失败。谁能帮忙。
当驱动程序找不到元素时,它会抛出 NoSuchElementFound 异常。您可以将 findElement 包装在 try catch 中以查看该元素是否存在或使用 isEmpty 方法。
boolean isElementPresent=true;
try
{
driver.findElement(By.id("ViewErrorMessage"));
}
catch
{
isElementPresent=false;
}
if(isElementPresent) {
String errorMsg = driver.findElement(By.xpath("//*[@id=\"ctl00_pnlViewErrorMessage\"]")).getText();
Assert.assertEquals(errorMsg, "Form is disabled, Hence you are here. Enable the form");
//system setting code
driver.findElement(By.xpath("//input[@name='btnSignin']")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//img[@id='imgLogo']")).isDisplayed();
}else{
//code to verify form elements goes here..
}
或者你可以这样做
if(!driver.findElements(By.id("ViewErrorMessage")).isEmpty()) {
String errorMsg = driver.findElement(By.xpath("//*[@id=\"ctl00_pnlViewErrorMessage\"]")).getText();
Assert.assertEquals(errorMsg, "Form is disabled, Hence you are here. Enable the form");
//system setting code
driver.findElement(By.xpath("//input[@name='btnSignin']")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//img[@id='imgLogo']")).isDisplayed();
}else{
//code to verify form elements goes here..
}
请尝试在 if 条件下显示 is,希望对您有所帮助:
if(driver.findElement(By.id("ViewErrorMessage").isDisplayed()) {
String errorMsg = driver.findElement(By.xpath("//*[@id=\"ctl00_pnlViewErrorMessage\"]")).getText();
Assert.assertEquals(errorMsg, "Form is disabled, Hence you are here. Enable the form");
//system setting code
driver.findElement(By.xpath("//input[@name='btnSignin']")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//img[@id='imgLogo']")).isDisplayed();
}else{
//code to verify form elements goes here..
}
或在下方使用
String s1 = "Error message";
String s2 = driver.findElement(By.id("ViewErrorMessage").getText());
if(s1 == s2) {
String errorMsg = driver.findElement(By.xpath("//*[@id=\"ctl00_pnlViewErrorMessage\"]")).getText();
Assert.assertEquals(errorMsg, "Form is disabled, Hence you are here. Enable the form");
//system setting code
driver.findElement(By.xpath("//input[@name='btnSignin']")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//img[@id='imgLogo']")).isDisplayed();
}else{
//code to verify form elements goes here..
}