Intereting Posts
Java.lang.RuntimeException: не удалось открыть пару входных каналов Создайте DummyActivity внутри папки androidTest для тестирования Как исправить проблемы с видимостью ссылок на html.fromHtml (в ICS и Honeycomb)? Каковы преимущества использования Джека и Джилл? Как сосредоточить индикатор прогресса в ProgressDialog легко (когда заголовок / текст не прошел) Событие, когда SIM-карта изменена Всегда показывать службу в панели уведомлений Возможно ли ввести режим отладки для андроида при запуске теста junit? Активация поставщика сетевого местоположения в эмуляторе Android? Android get Drawable image после загрузки picasso Создание пользовательского editText с функцией тегов Android – запуск службы с дополнительной информацией через put / getExtra При использовании CoordinatorLayout мой ScrollView имеет неправильный размер Проблемы с аутентификацией ASP.NET Forms на Phonegap (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 также является альтернативой, но он больше ориентирован на тестирование на передней панели.