简体   繁体   English

如何在 java selenium 中使用 if-else 循环解决这个问题?

[英]How to solve this problem using if-else loop in java selenium?

If variable value between j =<10 then page through error "Sorry ! user already..." and then I try to assign another random value to variable k and fill up form again.如果 j =<10 之间的变量值然后翻页错误“对不起!用户已经...”,然后我尝试为变量 k 分配另一个随机值并再次填写表格。

I want to execute driver.findElement(By.xpath("//*[contains(text(),'Sorry ! ')]")).isDisplayed() step only if I get error.我想仅在出现错误时执行driver.findElement(By.xpath("//*[contains(text(),'Sorry ! ')]")).isDisplayed()步骤。 Else just print success message.否则只打印成功消息。

Problem here is even if I get success message I'm getting element not found error due to driver.findElement(By.xpath("//*[contains(text(),'Sorry ! ')]")).isDisplayed() .这里的问题是,即使我收到成功消息,由于driver.findElement(By.xpath("//*[contains(text(),'Sorry ! ')]")).isDisplayed() I also tried implementing boolean Sorry_Error = driver.findElement(By.xpath("//*[contains(text(),'Sorry ! ')]")).isDisplayed();我也尝试实现boolean Sorry_Error = driver.findElement(By.xpath("//*[contains(text(),'Sorry ! ')]")).isDisplayed(); but I think it is similar logic just different way of implementation.但我认为这是相似的逻辑,只是实现方式不同。 if there is no error then loop should go for else block but insted it searching .isDisplayed xpath and throwing error.如果没有错误,那么循环应该去 else 块,但它会搜索.isDisplayed xpath 并抛出错误。 Isn't it correct way to handle user already exist error or is there any other logic.处理用户已经存在的错误是不是正确的方法,或者是否有任何其他逻辑。

This is success message这是成功信息

This is error message这是错误信息

 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); } } }

I don't know how to implement this logic.我不知道如何实现这个逻辑。

You won't necessarily need a wait here... depends on if javascript updates the DOM.你不一定需要在这里等待......取决于javascript是否更新DOM。 If it's after a standard page load, then just use:如果是在标准页面加载之后,则只需使用:

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

Else use try/catch with a wait:否则使用 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
         }

Use same logic for error text.对错误文本使用相同的逻辑。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM