2015-11-25 8 views
0

Я столкнулся со странной проблемой, используя testng + selenium webdriver в Firefox. У меня есть тест, который работает с dataprovider. Первый запуск теста работает правильно. В конце теста я перехожу на предыдущую страницу, чтобы сделать второй запуск корректным. Но во втором запуске WebElement.click() открывается в NEW TAB вместо ТАБЛИЦА ТАБЛИЦЫ. И вот почему webdriver не смог найти другие элементы. Пожалуйста, дайте совет, как решить эту проблему!WebElement.click() открывает новую вкладку вместо работы на той же вкладке

Я пробовал: 1. Используйте Thread.Sleep. Думал, что это поможет, но после сна время снова начнет открываться. 2. Используйте windows.Handle, чтобы перейти на новую вкладку. Он также не помогает мне, элементы до сих пор не найдены

Мой код ниже (DataProvider принимает данные из XML с помощью Сакс и это работает правильно):

package com.epam.training.selenium; 

import java.io.IOException; 
import java.util.List; 
import java.util.NoSuchElementException; 
import java.util.concurrent.TimeUnit; 

import javax.xml.parsers.ParserConfigurationException; 

import org.openqa.selenium.Alert; 
import org.openqa.selenium.By; 
import org.openqa.selenium.Keys; 
import org.openqa.selenium.NoAlertPresentException; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.interactions.Actions; 
import org.openqa.selenium.support.ui.ExpectedCondition; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.FluentWait; 
import org.openqa.selenium.support.ui.Select; 
import org.testng.Assert; 
import org.testng.annotations.BeforeClass; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 
import org.xml.sax.SAXException; 

import utils.TestingUtils; 
import xmlparser.TestingData; 

public class SeleniumTest 
{ 
    private WebDriver driver; 
    private String mainPage = "https://mail.ru"; 
    private String inboxPage = "https://e.mail.ru/messages/inbox/?back=1"; 
    private String loginVal = "seleniumtest"; 
    private String passwordVal = "Qwerty123"; 
    private String domainVal = "@inbox.ru"; 


@BeforeClass 
public void startBrowser(){ 
    driver = new FirefoxDriver(); 
    driver.manage().window().maximize(); 
    driver.get(mainPage); 
} 

@Test(groups = "smoke" , priority=1) 
public void authTest(){ 

    WebElement login = driver.findElement(By.xpath(".//*[@id='mailbox__login']")); 
    login.sendKeys(loginVal); 

    WebElement password = driver.findElement(By.xpath(".//*[@id='mailbox__password']")); 
    password.sendKeys(passwordVal); 

    Select selectDomain = new Select(driver.findElement(By.xpath(".//*[@id='mailbox__login__domain']"))); 
    selectDomain.selectByVisibleText(domainVal); 

    WebElement authButton = driver.findElement(By.xpath(".//*[@id='mailbox__auth__button']")); 
    authButton.click(); 

    WebElement logoutLink = driver.findElement(By.xpath(".//*[@id='PH_logoutLink']")); 
    boolean expected = true; 
    Assert.assertEquals(logoutLink.isDisplayed(), expected); 
} 


@Test(groups = {"drafts test"}, dependsOnGroups = "smoke", dataProvider = "New letter test data") 
public void createNewLetter(TestingData data){ 


    FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
      .withTimeout(30, TimeUnit.SECONDS) 
      .pollingEvery(3, TimeUnit.SECONDS) 
      .ignoring(NoSuchElementException.class); 

    WebElement createLetterButton = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='b-toolbar__left']/div/div/div[2]/div/a"))); 
    createLetterButton.click(); 

    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t"); 

    WebElement senderAdress = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='compose__header__content']/div[2]/div[2]/div[1]/textarea[2]"))); 

    senderAdress.sendKeys(data.getSenderAdress()); 

    WebElement senderSubject = driver.findElement(By.xpath(".//*[@class='compose__header__field']")); 
    Actions builder = new Actions(driver); 
    builder.sendKeys(senderSubject, data.getSenderSubject()).click().perform(); 

    WebElement disableInteractionsButton = driver.findElement(By.xpath("html/body/div[2]/div/div[5]/div/div/div/div/div/div/div/div/div/div/div/div/div/div[8]/div[2]/div[2]/div[2]/div/div/form/div[2]/div[4]/div[1]/div[2]/table/tbody/tr/td/table[1]/tbody/tr/td[19]/a/span[1]/span[2]")); 
    disableInteractionsButton.click(); 

    WebElement senderText = driver.findElement(By.xpath("html/body/div[2]/div/div[5]/div/div/div/div/div/div/div/div/div/div/div/div/div/div[8]/div[2]/div[2]/div[2]/div/div/form/div[2]/div[4]/div[3]/table/tbody/tr/td[1]/div/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[2]/td/textarea")); 

    builder.moveToElement(senderText).click().keyDown(Keys.CONTROL).sendKeys(String.valueOf('\u0061')) 
    .keyUp(Keys.CONTROL).sendKeys(data.getSenderText()).keyDown(Keys.CONTROL).sendKeys(String.valueOf('\u0073')).perform(); 

    boolean expected = true; 
    //  Assert.assertEquals(senderAdress.isDisplayed(), expected); 

    WebElement draftsLink = wait.until(new ExpectedCondition<WebElement>() { 
     public WebElement apply(WebDriver d) { 
      return d.findElement(By.xpath(".//div[@id='b-toolbar__right']/div/div/div[2]/div[6]/div")); 
     } 
    }); 
    expected = true; 
    Assert.assertEquals(draftsLink.isEnabled(), expected); 
    driver.get(inboxPage); 
    try { 
     Alert alert = driver.switchTo().alert(); 
     alert.accept(); 
    } 
    catch (NoAlertPresentException e) { 

    } 
} 


@DataProvider(name = "New letter test data") 
public Object[][] getValuesForNewDraft() throws ParserConfigurationException, SAXException, IOException{ 
    List<TestingData> dataList = TestingUtils.parse(); 
    return new Object[][]{ 
     new Object[] {dataList.get(0)}, 
     new Object[] {dataList.get(1)} 
    }; 
} 

}

ответ

0

Что ты нажав на WebDriver (ссылка, кнопка?). Ссылки могут иметь атрибут «target», который может заставить браузер открыть ссылку в новой вкладке/окне.

+0

Это означает, что этот WebElement createLetterButton = wait.until (ExpectedConditions.presenceOfElementLocated (By.xpath (".//*[@ id = 'b-toolbar__left']/div/div/div [2]/div/a «))); createLetterButton.click(); это кнопка на сайте –

+0

А что такое обработчик кнопки (функция js)? –

+0

Я не знаю, есть только ссылка, насколько я могу видеть –

0

В соответствии с вашим xpath это ссылка, а пользовательский интерфейс отображается как ссылка на кнопку. Некоторые ссылки на кнопки будут открываться как отдельная новая вкладка. Пробовали ли вы эту ссылку кнопки вручную? WebElement.click() Функция просто нажимает на этот элемент, не изменяя эту функцию для открытия на той же вкладке или в новой вкладке. проверьте его вручную.

0

Проблема решена! У меня был последний Firefox build v.42, который не полностью поддерживается Selenium. Установка v.31 из Firefox решила все проблемы. Спасибо за ответы!

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