Перейти к содержимому

dyarosh

Регистрация: 14 ноя 2014
Offline Активность: 27 окт 2015 11:35
-----

Мои сообщения

В теме: Нерегулярные ошибки. Selenium Webdriver.

27 ноября 2014 - 08:25

Еще раз спасибо и прошу прощение за неверный пост. Поспешил, до конца не проверил.

Удалось избавиться от ошибок соединения с браузером следуя вашему совету...

 

 

 

1) Не пытайтесь запустить сразу много браузеров, растягивайте этот процесс по времени. Например, в Java для простоты можно сделать метод, который стартует браузеры, и пометить его модификатором synchronized. Это даст возможность ожидать не 45 секунд, а бесконечно долго, пока стартуют другие браузеры.

 

 Использование метода getFirefoxDriver(), решило проблему: 

public class TestCase {

    @Rule
    public Timeout globalTimeout = new Timeout(300000);

    protected WebDriver driver;

    protected MainPage backendMainPage;

    public void init() throws Exception {
        this.driver = this.getFirefoxDriver();
        driver.manage().window().maximize();
        driver.get("http://192.168.33.10/admin/");
        LoginPage page = new LoginPage(driver);
        backendMainPage = page.submitValidData();
    }

    private synchronized WebDriver getFirefoxDriver() {
        WebDriver firefoxDriver = null;
        try {
            firefoxDriver = new FirefoxDriver();
        } catch (WebDriverException e) {
            Assert.fail("Not connect to Firefox.");
        }
        return firefoxDriver;
    }
}

В теме: Нерегулярные ошибки. Selenium Webdriver.

19 ноября 2014 - 14:50

Запустил с десяток вручную тестов - все подключились

...
        long startTime = System.currentTimeMillis();
        this.driver = this.getFirefoxDriver();
        long finishTime = System.currentTimeMillis();
        System.out.println(finishTime - startTime);
...

Значения следующие:

7118 ms
7226 ms
6174 ms
5464 ms
6468 ms
4717 ms
7457 ms
9053 ms
6614 ms
7638 ms
6517 ms

А тесты которые не подрубились к FireFox вылитают по таймауту. Указаному в файле TestCase.java

java.lang.Exception: test timed out after 300000 milliseconds 

В теме: Нерегулярные ошибки. Selenium Webdriver.

19 ноября 2014 - 13:18

Огромное спасибо.

От ошибок:

org.openqa.selenium.TimeoutException

org.openqa.selenium.StaleElementReferenceException

удалось избавиться, доведя до ума тесты...

 

Но с org.openqa.selenium.WebDriverException ничего не могу сделать.

Написал метод getFirefoxDriver():

public class TestCase { 
    @Rule
    public Timeout globalTimeout = new Timeout(300000);

    protected WebDriver driver;

    protected MainPage backendMainPage;

    private static int countOfRetries = 0;

    private final static int maxNumbersOfRetries = 5;

    private final static int timeoutForRetries = 120000;

    public void init() throws Exception {
        this.countOfRetries = 0;
        this.driver = this.getFirefoxDriver();
        driver.manage().window().maximize();
        driver.get("http://192.168.33.10/admin/");
        LoginPage page = new LoginPage(driver);
        backendMainPage = page.submitValidData();
    }

    private WebDriver getFirefoxDriver() throws InterruptedException {
        WebDriver firefoxDriver = null;
        this.countOfRetries++;
        try {
            firefoxDriver = new FirefoxDriver();
        } catch (WebDriverException e) {
            if (this.countOfRetries < this.maxNumbersOfRetries) {
                Thread.sleep(this.timeoutForRetries);
                firefoxDriver = this.getFirefoxDriver();
            }
            Assert.fail("Not connect to Firefox.");
        }
        return firefoxDriver;
    }
}
 
Потом переделывал его:
    private synchronized WebDriver getFirefoxDriver() {
        WebDriver firefoxDriver = null;
        try {
            firefoxDriver = new FirefoxDriver();
        } catch (WebDriverException e) {
            Assert.fail("Not connect to Firefox.");
        }
        return firefoxDriver;
    } 

Результат тот же тесты хаотично валятся. Наверное проблема действительно в производительности машины.

Попробую еще откатить FireFox. 


В теме: Select2

14 ноября 2014 - 08:45

А я в нашем проектк такой метод писал, для выбора элементов:

protected void selectOption(WebElement select, String optionText) {
        WebElement s2select = driver.findElement(By.id("s2id_" + select.getAttribute("id")));
        s2select.findElement(By.tagName("a")).click();
        List<WebElement> list = driver.findElements(By.cssSelector("ul.select2-results li.select2-result"));
        for(WebElement option : list ) {
            if(optionText.equals(option.getText())) {
                option.click();
                break;
            }
        }
    }

select - HTML элемент select. к которому прикручивают компонент select2

optionText - текст который нужно выбрать

 

driver - я инициализировал в конструкторе класса.