2015-10-01 2 views
1

Его действие с каждым тестовым сценарием я пытаюсь создать с помощью селена + TestNG. После первого метода @test метод webdriver никогда не идентифицирует элементы в режиме отдыха @test и всегда объявляет их как fail.Selenium не идентифицирует элемент во втором тесте

Чтобы сделать это просто следующий сценарий: Нагрузки веб-драйверов на страницу, и в 1-ом @test(priority=0) он ищет Google, войдите в кнопку и нажимает на нее, чтобы загрузить Google знак в экран. Во втором @test(priority=1) Я пытаюсь определить текстовое поле электронной почты по его идентификатору, но всегда получаю исключение из элемента, который не найден. Но если я переведу код из 2-го теста в 1-й тест, он успешно выполняется

Вот фрагмент кода. Метод enterCredentials() - это проблема.

public class CSgoogleLogin extends CloudDriver { 

@Test(priority=0) 
public void attemptLogin(){ 

    WebElement myDynamicElement = (new WebDriverWait(driver, 100)) 
       .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='ROOT-2521314']/div/div[2]/div/div[1]/div/div/div/center/div[3]/div[2]/div[1]/div/span/img"))); 
    driver.findElement(By.xpath("//*[@id='ROOT-2521314']/div/div[2]/div/div[1]/div/div/div/center/div[3]/div[2]/div[1]/div/span/img")).click();  
} 

@Test(priority=1) 
public void enterCredentials(){ 
    WebElement myDynamicElement; 
    if(!driver.findElement(By.id("Email")).isDisplayed()){ 
    myDynamicElement = (new WebDriverWait(driver, 1)) 
       .until(ExpectedConditions.presenceOfElementLocated(By.id("Email"))); 
    } 
    //Entering Username 
    driver.findElement(By.id("Email")).sendKeys("xyz"); 
    driver.findElement(By.id("next")).click(); 

    myDynamicElement = (new WebDriverWait(driver, 1)) 
       .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='Passwd']"))); 
    //Entering Password 
    driver.findElement(By.id("Passwd")).sendKeys("xyz"); 
    driver.findElement(By.id("signIn")).click(); 
}} 

Следующий класс CloudDriver. Что еще более важно при запуске отладки, код работает правильно.

public class CloudDriver { 

protected WebDriver driver = null; 

@BeforeSuite 
public void setUP(){ 

    driver = new FirefoxDriver(); 
    driver.get("http://apps3.thecloudstream.com/"); 
} 

@AfterSuite 
public void Closing(){ 

    driver.quit(); 
} 

}

+0

Вы пытались увеличить время ожидания до загрузки элементов? Это может происходить, потому что второй тест не знает состояния страницы, которое изменяется кликом первого теста и пытается выполнить описанные в нем операции. –

+0

На самом деле страница загружается даже в кратчайшие сроки с помощью электронной почты и следующей кнопки. Но второй тест продолжает ждать поля электронной почты, а затем объявляет его не найденным. Но если я выполняю действие 2-го теста в методе первого теста. Все элементы найдены заполненными и успешно –

ответ

0

Не могли бы вы показать код класса "CloudDriver"?

Я не вижу сбоев, просматривающих текущий код. Можете ли вы попробовать установить экземпляр драйвера в методе @BeforeClass? Что-то вроде ниже:

public class CSgoogleLogin extends CloudDriver { 
Webdriver driver = null; 
@BeforeClass 
public void setUp(){ 
driver = getDriverInstance();//Get this instance from the super class. 
} 
@Test(priority=0) 
public void attemptLogin(){} 
@Test(priority=1) 
public void enterCredentials(){} 
0

Я решаю проблему, применяя неявное ожидание. в введите т.е. учетные

driver.manage().timeouts().implicitlyWait(3, TimeUnit.seconds); 
    // Entering Username 
    driver.findElement(By.xpath("//*[@id='Email']")).sendKeys(
      "[email protected]"); 
    driver.findElement(By.xpath("//*[@id='next']")).click(); 

неявные ожидания опрашивает Dóm для заданного времени до элемента или элементов в вопросе не найдено.

Смежные вопросы