如何使用javaselenium中的if-else循环来解决这个问题



如果变量值介于j=<10然后寻呼通过错误";很抱歉用户已经"然后我尝试给变量k分配另一个随机值,并再次填写表单。

我只想在出现错误时执行driver.findElement(By.xpath("//*[contains(text(),'Sorry ! ')]")).isDisplayed()步骤。否则只打印成功消息。

这里的问题是,即使我收到成功消息,我也会收到由于driver.findElement(By.xpath("//*[contains(text(),'Sorry ! ')]")).isDisplayed()导致的元素未找到错误。我也尝试过实现boolean Sorry_Error = driver.findElement(By.xpath("//*[contains(text(),'Sorry ! ')]")).isDisplayed();,但我认为它是相似的逻辑,只是实现方式不同而已。若并没有错误,那个么循环应该转到else块,但指示它搜索.isDisplayed-xpath并抛出错误。这不是处理用户已存在错误的正确方法吗?或者还有其他逻辑吗。

这是成功消息

这是错误消息

package com.self.learn;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;
public class testandquiz {
public static WebDriverWait wait;
@Test
public void Simple_Test() throws InterruptedException {
System.setProperty("webdriver.chrome.silentOutput", "true");
System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
WebDriver driver = new ChromeDriver();
wait = new WebDriverWait(driver, 10);
driver.manage().deleteAllCookies();
driver.get("https://www.testandquiz.com/user-registration");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
((JavascriptExecutor) driver).executeScript("scroll(0,300)");
WebElement Fname = driver.findElement(By.id("first_name"));
WebElement Lname = driver.findElement(By.id("last_name"));
WebElement User_name = driver.findElement(By.id("user_name"));
WebElement email_address = driver.findElement(By.id("email_address"));
WebElement password = driver.findElement(By.id("password"));
WebElement re_password = driver.findElement(By.id("re_password"));
WebElement city = driver.findElement(By.id("city"));
WebElement state = driver.findElement(By.id("state"));
WebElement country = driver.findElement(By.id("country"));
WebElement pin_code = driver.findElement(By.id("pin_code"));
WebElement contact_no = driver.findElement(By.id("contact_no"));
Random randomGenerator = new Random();
int j = 10;
int k = 99999;
int i = randomGenerator.nextInt(j);
Fname.sendKeys("Test" + i + "");
Lname.sendKeys("Test" + i + "");
User_name.sendKeys("Test" + i + "");
email_address.sendKeys("Test" + i + "");
password.sendKeys("Test" + i + "");
re_password.sendKeys("Test" + i + "");
city.sendKeys("Test" + i + "");
state.sendKeys("Test" + i + "");
country.sendKeys("Test" + i + "");
pin_code.sendKeys("Test" + i + "");
contact_no.sendKeys("1234567890");
driver.findElement(By.xpath("//button[contains(text(),'Sign Up')]")).click();
if (driver.findElement(By.xpath("//*[contains(text(),'Sorry ! ')]")).isDisplayed()) {
WebElement Fname1 = driver.findElement(By.id("first_name"));
WebElement Lname1 = driver.findElement(By.id("last_name"));
WebElement User_name1 = driver.findElement(By.id("user_name"));
WebElement email_address1 = driver.findElement(By.id("email_address"));
WebElement password1 = driver.findElement(By.id("password"));
WebElement re_password1 = driver.findElement(By.id("re_password"));
WebElement city1 = driver.findElement(By.id("city"));
WebElement state1 = driver.findElement(By.id("state"));
WebElement country1 = driver.findElement(By.id("country"));
WebElement pin_code1 = driver.findElement(By.id("pin_code"));
WebElement contact_no1 = driver.findElement(By.id("contact_no"));
Fname1.clear();
Fname1.sendKeys("Test" + k + "");
Lname1.clear();
Lname1.sendKeys("Test" + k + "");
User_name1.clear();
User_name1.sendKeys("Test" + k + "");
email_address1.clear();
email_address1.sendKeys("Test" + k + "");
password1.clear();
password1.sendKeys("Test" + k + "");
re_password1.clear();
re_password1.sendKeys("Test" + k + "");
city1.clear();
city1.sendKeys("Test" + k + "");
state1.clear();
state1.sendKeys("Test" + k + "");
country1.clear();
country1.sendKeys("Test" + k + "");
pin_code1.clear();
pin_code1.sendKeys("Test" + k + "");
contact_no1.clear();
contact_no1.sendKeys("1234567890");
driver.findElement(By.xpath("//button[contains(text(),'Sign Up')]")).click();
}
else {
String Message = driver.findElement(By.xpath("//div[contains(text(),'verification mail')]")).getText();
System.out.println(Message);
}
}
}

我不知道如何实现这个逻辑。

您不一定需要在这里等待。。。取决于javascript是否更新DOM。如果是在标准页面加载之后,那么只需使用:

List<WebElement> elements = driver.findElements(By.xpath("//*[contains(text(), 'Sorry')]");
if (elements.size() > 0)
{
// sorry found
}
else
{
// sorry not found
}

否则使用try/catch并等待:

try {
WebDriverWait wait = new WebDriverWait(driver, 5);
WebElement element =  wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(text(), 'Sorry')]"));     
// sorry found             
}
catch (Exception ex)
{
//sorry not found
}

对错误文本使用相同的逻辑。

最新更新