Обработка рекламы в родном приложении с использованием Selenium Java - PullRequest
0 голосов
/ 26 октября 2018

Я автоматизирую Android Native Gaming App, наше приложение отображает рекламу из разных рекламных сетей.После отправки каждой игры вы можете увидеть статическую рекламу и видеообъявление или вообще не видеть рекламу.Если видеообъявление найдено, оно может варьироваться от 30 секунд до 1 минуты.Важно, чтобы при использовании инспектора Appium для шпионажа различные экраны видеообъявления идентифицировались только по классу (android.webkit.WebView, android.widget.VideoView, android.widget.Button, android.view.View, android.widget.Image& android.widget.ImageView.).После завершения показа рекламы нам нужно нажать на кнопку возврата устройства и начать играть в следующую игру.Можете ли вы предложить какой-либо хороший подход для автоматизации такого рода приложений?Любой пример кода очень ценится.

1 Ответ

0 голосов
/ 26 октября 2018

Вариант I: Вы должны попросить своих разработчиков создать версию приложения без рекламы.

Преимущества - Нет рекламы.

Недостатки - Вы не будете тестировать тот же код, который планируете выпустить.

Вы можете отключить только полноэкранную рекламу.

Я думаю, что нет лучшего способа сделать это.Стабильная автоматическая проверка или проверка того же кода, который вы планируете выпустить.

Вариант II: - отловить, если реклама видна, и нажать кнопку возврата.

Например (пример для Android):

protected boolean checkAdvert(AppiumDriver<WebElement> driver, int timeout) {
    By adTree = By.xpath("//hierarchy/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]");
    Map<String, Object> adParams = new HashMap<>();
    //trying to wait for the ad to come up and then click the Expense button
    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    driver.context("NATIVE_APP");           
    FluentWait<WebDriver> await = new FluentWait<WebDriver> (driver)
            .withTimeout(timeout, TimeUnit.SECONDS)
            .pollingEvery(500, TimeUnit.MILLISECONDS)
            .ignoring(NoSuchElementException.class);
    try {
        await.until (ExpectedConditions.visibilityOf(driver.findElement(adTree)));
        // go BACK to eliminate the popup
        adParams.clear();
        adParams.put("keySequence", "BACK");
        driver.executeScript("mobile:presskey", adParams);
        System.out.println("Press the back button to get out of ad");
        return true;
    } catch (Exception t) {
        System.out.println("no ad showed up");
        return false;
    }
}

и используйте это в классе объекта страницы:

public void addExp(String desc, String amount) {
    do {
        try  {
            driver.context("WEBVIEW");
            driver.findElement(expDesc).sendKeys(desc);
            driver.findElement(expAmnt).sendKeys(amount);
            adClick = false;
        } catch (NoSuchElementException ne) {
            adClick = checkAdvert(driver, 1);
            if (!adClick) throw ne;
        }
    } while (adClick);
}

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

adTree = By.xpath("//hierarchy/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...