Явное ожидание для автоматизации приложения Windows с помощью winappdriver

Я новичок в Windows Application Driver, и мой проект требует автоматизации настольного приложения, поэтому я решил использовать winappdriver, поскольку он похож на селен, в использовании которого я уверен.

Говоря о проблеме, просто интересно, есть ли способ добиться явного ожидания и неявного ожидания с помощью winappdriver. Ниже приведен код, который я использовал как часть моих тестовых примеров, тест завершился сбоем с исключением (NoSuchElementException), однако, если я поставлю статическое ожидание вместо явного ожидания, он будет работать, как ожидалось.

 //Driver Setup
public class OscBase {

public static WindowsDriver<WebElement> applicaitonSession, driver = null;
public static WindowsDriver<RemoteWebElement> desktopSession = null;
public static DesiredCapabilities capabilities, cap1, cap2;
public static ProcessBuilder pBuilder;
public static Process p;

public void startDriver() {
    try {

        pBuilder = new ProcessBuilder("C:\\Program Files (x86)\\Windows Application Driver\\WinAppDriver.exe");
        pBuilder.inheritIO();
        p = pBuilder.start();

    }

    catch (IOException e) {
        e.printStackTrace();
    }
}

public void stopDriver() {

    p.destroy();
}

public void createDesktopSession() throws MalformedURLException {

    cap1 = new DesiredCapabilities();
    cap1.setCapability("app", "Root");
    desktopSession = new WindowsDriver<RemoteWebElement>(new URL("http://localhost:4723"), cap1);
}

public void openApplication() throws InterruptedException, MalformedURLException {

    if (driver == null) {

        try {

            capabilities = new DesiredCapabilities();
            capabilities.setCapability("app",
                    "Appnamewithlocation");
            applicaitonSession = new WindowsDriver<WebElement>(new URL("http://localhost:4723"),
                    capabilities);

        } catch (Exception e) {

            System.out.println("Application opened!!!");

        } finally {

            createDesktopSession();
        }

        Thread.sleep(8000L);

        String handle = desktopSession.findElementByAccessibilityId("InstallerView5")
                .getAttribute("NativeWindowHandle");
        System.out.println(handle);
        int inthandle = Integer.parseInt(handle);
        String hexHandle = Integer.toHexString(inthandle);

        //System.out.println(hexHandle);

        cap2 = new DesiredCapabilities();
        cap2.setCapability("appTopLevelWindow", hexHandle);
        driver = new WindowsDriver<WebElement>(new URL("http://localhost:4723"), cap2);

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    }

}


public boolean isDisplayed_SafeLoginNoBtn() {

    wait = new WebDriverWait(driver, 40);
    return wait.until(ExpectedConditions.visibilityOf(safeLoginNoBtn())).isDisplayed();

}




@Test
public void osc_Get_Data() throws InterruptedException, IOException {

    //Thread.sleep(20000);

    // Boolean value=oscLogin.safeLoginNoBtn().isDisplayed();

    try {
        Boolean value = oscLogin.isDisplayed_SafeLoginNoBtn();
        System.out.println("IS displayed========>"+value);
        if (value) {

            oscLogin.click_safeLogin();
        }
    } catch (Exception e) {

        System.out.println("Safe Login!!!!");
    }

person kandha guru    schedule 23.12.2018    source источник


Ответы (1)


Конечно да, класс WebDriverWait будет работать. Вот пример

WebDriverWait waitForMe = new WebDriverWait();
WebDriverWait waitForMe = new WebDriverWait(session, new TimeSpan.Fromseconds(10));
var txtLocation = session.FindElementByName("Enter a location");
waitForMe.Until(pred => txtLocation.Displayed);

Я создал подробный курс по автоматизации пользовательского интерфейса с использованием WinAppDriver и C # .Net. Я опубликую его через несколько дней. Дайте мне знать, если вам интересно :)

person Naeem A. Malik    schedule 30.08.2019