Как стать автором
Обновить

Комментарии 8

Для поиска элементов и анализа окон удобно использовать AutomationSpy
«С Winium в нормальном режиме можно общаться посредством Selenium с использованием Python и Java; „

А что по поводу .NET/c#?
В начале знакомства почему-то попадались материалы исключительно на Python и изредка Java. А вообще всё, судя по всему, ограничивается возможностью работы с Selenium.
Пара ссылок на эту тему:
http://docs.seleniumhq.org/about/platforms.jsp#programming-languages
https://habrahabr.ru/company/2gis/blog/263347/
Ниже есть ссылка на C# пример (перетаскивание файла в хром). Не идеальный, но работает.
Интересно, а с долгим открытием окон или появлением/исчезновением элементов сталкивались? Если да, решает ли Winium эту задачу своими средствами?
Если драйвер долго не находит какой-либо элемент (таймаут несколько секунд, точное значение не знаю), он выкидывает эксепшн. Так что можно отлавливать его в циклах. While (true) это не очень хороший вариант, а вот свой int «таймаут» по количеству попыток найти окно хорошо подходит.
Есть пример, как указать свой таймаут? Это Selenium делает или сам Winium?

Спрашиваю вот почему. Скажем, мои студенты написали сценарий по перетаскиванию файла из explorer.exe в хром. Пример c Winium на C# получился костыльным из-за жёстких слипов. Для максимально честного визуального сравнения, скажем, с примером на pywinauto нужно выжать максимум краткости и читабельности из каждого инструмента. Уверен, в самом Winium должны быть адекватные wait'ы. Мне пока просто хочется знать, есть они или нет. И насколько удобные. Ну, и для полноты есть подобный пример на C# с применением TestStack.White, тоже костыльный, к сожалению.
Насколько я понимаю, мы работаем с Winium драйвером опосредованно через Selenium. К сожаленью ли, к счастью ли, я тоже использовал слипы (наверное, сказывается опыт работы с дельфовым Zombie). Вот тут есть ImplicitlyWait — подозреваю, это именно то, что Вам нужно. Я же ожидаю подобным образом:
int timeoutIC = 5; //max number of iterations
Boolean flg = true; //success flag
int h = 0;
WebElement win = null;
while ((flg)&&(h < timeoutIC))
{
    win = attachN(_webDriver,winName);//_webDriver - current attached driver, winName - Name of the target window
    if (win == null)
    {
        log("Window was not found, waiting further");
        //optional - Thread.sleep(...) here, but not necessary
        h++;
    }
    else
    {
        log("Window found");
        flg = false;
    }
}
if (flg){
    throw new Exception("The window was not appeared in time");
}

/* the rest of your code*/

public static WebElement attachN(WebDriver _driver, String _name){
    log("Attaching to element ...");
    try{
        WebElement res = _driver.findElement(By.name(_name)); //will wait for window to appear for predefined time, will throw exception if window was not found
        return res;
    }
    catch(Exception ex){
        log("... window was not found");
        return null;
    }
}

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации