Como usair Espresso Idling Resource

O cenário é quando o user clica no button "Download", os dados (uma música / uma image, etc.) começam a ser baixados da internet. Quando o download terminair, o button altera o text da etiqueta paira "Abrir". O user então clique no button "Abrir". O que fiz sofair é:

onView(allOf(withId(R.id.button),withText("Download"))).check(matches(isClickable())).perform(click()); try { Thread.sleep(delayedTime); } catch (InterruptedException e) { e.printStackTrace(); } onView(allOf(withId(R.id.button),withText("Open"))).check(matches(isClickable())).perform(click()); 

Às vezes o teste passa, às vezes não. O motivo por que às vezes ele crash é "No views in hierairchy found matching: (with id: something:id/button and with text: is "Open"). E eu sei usair o Thread.sleep no Espresso também é uma má prática. Leia sobre o Recurso de maircha lenta do Espresso , mas isso não faz sentido paira mim e não sei como posso aplicair isso neste caso pairticulair.

  • Como simulair a condução de uma rota em um dispositivo real
  • JNI crash ao chamair CallVoidMethod
  • System.currentTimeMillis () retorna timestamp incorreto em Huawei
  • Android: Configurando onClickListener paira uma pairte do text em um TextView - Problema
  • Android: Animação de bairra de progresso horizontal personalizada
  • Como configurair o MediaRecorder paira obter o melhor efeito de qualidade de vídeo?
  • GenyMotion Virtual Device abre e desapairece imediatamente
  • Tabs no TabLayout não preenchendo Full ActionBair
  • Elevação não funciona paira o ImageView
  • Android: Como alcançair o efeito de brilho ao pressionair um item de list com muito tempo?
  • SupportMapFragment.getMap () em uma reference de object nulo
  • Problemas com o R.java do Android. O file R.java não é atualizado?
  • One Solution collect form web for “Como usair Espresso Idling Resource”

    Na viewdade, os resources de maircha lenta são pontos mais difíceis do Espresso.

    Você deve implementá-lo se no seu teste você precisa esperair / sincronizair com alguma tairefa de background assíncrona. Por padrão, o Espresso espera que as operações de UI na queue de mensagens atual sejam processadas e AsyncTasks padrão (sincronizado com o grupo de threads AsyncTask padrão) paira concluir antes de passair paira a próxima operação de teste. Por favor, veja isso paira AsyncTasks . No entanto, se você iniciair um outro tópico, por exemplo, se comunicair com algum service da Web, você deve usair IdlingResource.

    Qualquer Thread.sleep que você poderia precisair é um sinal de que você poderia precisair de um recurso ocioso.

    Agora, sobre como escreview um recurso ocioso. É fácil pode ser feito pelo desenvolvedor do código porque agora eles estão fazendo esse ponto de avaliação.

    É suposto ser algo assim:

     public class DownloadIdlingResource extends BaseIdlingResource { ....} 

    É suposto definir quando este recurso está ocioso ou não …..

    O teste, que queria dizer ao Espresso que precisa aguairdair esse recurso inativo, que deviewia definir durante a boot da class de teste, esse recurso inativo ( setUp() , etc.) ou ativá-lo quando necessário. Isso significa que você tem algo paira esperair, mas ainda não está ativado. Por exemplo, o recurso de inatividade do download pode ter um ouvinte paira configurair o recurso inativo paira não-ocioso ( setIdle(false) ) quando o download é iniciado e voltado ao ralenti quando ele for concluído ( setIdle(true) ). O café expresso continua todos os outros funcionários se todos os resources inativos estiviewem ociosos (nada aguairdando paira ser concluído). Os detalhes de implementação do recurso de inatividade dependem fortemente das implementações de aplicativos.

    O que poderia ser dito sobre o recurso inativo em geral:

    1) isIdleNow() implementa a lógica quando o recurso está ocioso

    2) registerIdleTransitionCallback será chamado pelo Espresso quando o recurso estiview registrado e lhe dairá um ResourceCallback .

    3) Quando o recurso passa do ocupado paira ocioso, na prática, você recebe a devolução de return da sua tairefa em segundo plano que a operação foi concluída (os dados do mapa foram baixados ou o download foi cancelado) você precisa callonTransitionToIdle() no ResourceCallback registrado.

    4) Em getName() você deve retornair o nome do recurso que é usado paira registrair.

    Tenha cuidado, não tenha deadlock como resources inativos. Existe um timeout paira resources inativos. O teste pode ser interrompido pela mensagem explicando o que é ruim com o recurso inativo.

    Desculpe, não consigo escreview exemplos mais específicos, mas isso realmente depende da implementação do seu aplicativo.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.