Intereting Posts
Ошибка: подозрительное пространство имен и префиксная комбинация при попытке создания подписанного APK Оверлей экрана обнаружены блоки Android-разрешения Пользовательский селектор для фона списка Как повесить исходящий звонок в Android? Поиск всех доступных стилей, определяемых темами платформы Android Разбор массива объектов JSON с использованием Jackson 2.0 Сохранение пользовательского интерфейса при изменении ориентации – onSaveInstanceState не работает, как ожидалось, если сохранить фрагмент Обновление Eclipse с помощью средств разработки Android v. 23 Как отменить регистрацию с GCM после удаления приложения Как найти документ gradle lintOptions для Android? Несколько вопросов о пользовательских разрешениях в Android Широковещательный приемник не получит событие камеры Веб-просмотр Android с помощью GSAP: попытка удалить локальную ссылку, отличную от JNI, сбросить поток LinearLayoutManager setReverseLayout () == true, но стек элементов снизу Как создать пустой конструктор для класса данных в Kotlin Android

Селендроид как скребок

Я намереваюсь создать приложение для Android, которое запускает безгласный вход на веб-сайт, а затем очищает содержимое с последующей страницы при сохранении сеанса входа в систему.

Я сначала использовал HtmlUnit в обычном Java-проекте, и он работал отлично. Но позже выяснилось, что HtmlUnit несовместим с Android.

Затем я попробовал библиотеку JSoup , отправив запрос «POST» в форму входа в систему. Но итоговая страница не загружается полностью, так как JSoup не поддерживает JavaScript.

Затем мне предложили взглянуть на Selendroid, который на самом деле является платформой автоматизации тестирования Android. Но мне действительно нужен парсер Html, который поддерживает как JavaScript, так и Android. Я считаю, что Selendroid довольно сложно понять, что я даже не могу понять, какие зависимости использовать.

  • selendroid-клиент
  • selendroid-автономный
  • selendroid-сервер

С Selenium WebDriver код будет таким же простым, как и следующее. Но может ли кто-нибудь показать мне аналогичный пример кода для Selendroid ?

WebDriver driver = new FirefoxDriver(); driver.get("https://mail.google.com/"); driver.findElement(By.id("email")).sendKeys(myEmail); driver.findElement(By.id("pass")).sendKeys(pass); // Click on 'Sign In' button driver.findElement(By.id("signIn")).click(); 

А также,

  1. Какие зависимости можно добавить в файл Gradle.Build?
  2. Какие библиотеки Selendroid импортировать?

Solutions Collecting From Web of "Селендроид как скребок"

К сожалению, я не получил работу Selendroid. Но я нахожу обходное решение для очистки динамического контента, используя только встроенный в WebView WebView с включенным JavaScript.

 mWebView = new WebView(); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new HtmlHandler(), "HtmlHandler"); mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (url == urlToLoad) { // Pass html source to the HtmlHandler WebView.loadUrl("javascript:HtmlHandler.handleHtml(document.documentElement.outerHTML);"); } }); 

Метод JS document.documentElement.outerHTML будет извлекать полный html, содержащийся в загруженном URL-адресе. Затем возвращаемая строка html отправляется методу handleHtml в классе HtmlHandler.

 class HtmlHandler { @JavascriptInterface @SuppressWarnings("unused") public void handleHtml(String html) { // scrape the content here } } 

Вы можете использовать библиотеку Jsoup, чтобы очистить необходимый контент от html String.

Я никогда не использовал Selendroid поэтому я не совсем уверен в этом, но, Selendroid сеть, я нашел этот пример и, по его мнению, я предполагаю, что ваш перевод кода из Selenium в Selendroid будет:

Код перевода (на мой взгляд)

 public class MobileWebTest { private SelendroidLauncher selendroidServer = null; private WebDriver driver = null; @Test public void doTest() { driver.get("https://mail.google.com/"); WebElement email = driver.findElement(By.id("email")).sendKeys(myEmail); WebElement password = driver.findElement(By.id("pass")).sendKeys(pass); WebElement button = driver.findElement(By.id("signIn")).click(); driver.quit(); } @Before public void startSelendroidServer() throws Exception { if (selendroidServer != null) { selendroidServer.stopSelendroid(); } SelendroidConfiguration config = new SelendroidConfiguration(); selendroidServer = new SelendroidLauncher(config); selendroidServer.launchSelendroid(); DesiredCapabilities caps = SelendroidCapabilities.android(); driver = new SelendroidDriver(caps); } @After public void stopSelendroidServer() { if (driver != null) { driver.quit(); } if (selendroidServer != null) { selendroidServer.stopSelendroid(); } } } 

Что вы должны добавить в свой проект?

Кажется, что вы должны добавить в свой проект Selendroid standalone jar file . Если у вас есть сомнения по поводу добавления внешнего флага в проекте Android, вы можете увидеть этот вопрос: как я могу использовать внешние JAR в проекте Android?

Здесь вы можете скачать jar file jar : jar file

Кроме того, кажется, что недостаточно просто добавить jar file в ваш проект. Вы также должны добавить selendroid-client jar file версии автономной версии, которая у вас есть.

Вы можете скачать его здесь: файл jar клиента

Я надеюсь, что это будет полезно для вас!

Я бы предложил вам использовать WebdriverIO, так как вы хотите использовать Javascript. Он использует NodeJs, поэтому будет легко потребовать, чтобы другие плагины очищали HTML.

Appium также является альтернативой, но он больше ориентирован на тестирование на передней панели.