You are looking at the HTML representation of the XML format.
HTML is good for debugging, but is unsuitable for application use.
Specify the format parameter to change the output format.
To see the non HTML representation of the XML format, set format=xml.
See the complete documentation, or API help for more information.
<?xml version="1.0"?>
<api>
  <query-continue>
    <allpages gapcontinue="Request_Feature_GXtest_Designer" />
  </query-continue>
  <query>
    <pages>
      <page pageid="542" ns="0" title="Repositorio de Custom Commands">
        <revisions>
          <rev contentformat="text/x-wiki" contentmodel="wikitext" xml:space="preserve">{{Idiomas
| Repositorio de Custom Commands
| Custom Commands Repository
| カスタムコマンドのサンプル集
}}
== Generar CNPJ ==
'''Tipo''': Acción &lt;br&gt;
'''Descripción''': no tiene parametros (salida en variable &amp;_resultCC)

&lt;pre&gt;
        var n = 9;
	var n1 = Math.round(Math.random()*n);
	var n2 = Math.round(Math.random()*n);
	var n3 = Math.round(Math.random()*n);
	var n4 = Math.round(Math.random()*n);
	var n5 = Math.round(Math.random()*n);
	var n6 = Math.round(Math.random()*n);
	var n7 = Math.round(Math.random()*n);
	var n8 = Math.round(Math.random()*n);
	var n9 = 0; 
	var n10 = 0;
	var n11 = 0;
	var n12 = 1;
	var d1 = n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
	d1 = 11 - ( Math.round(d1 - (Math.floor(d1/11)*11)) );
	if (d1&gt;=10) d1 = 0;
	var d2 = d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;
	d2 = 11 - ( Math.round(d2 - (Math.floor(d2/11)*11)) );
	if (d2&gt;=10) d2 = 0;
	retorno = ''+n1+n2+n3+n4+n5+n6+n7+n8+n9+n10+n11+n12+d1+d2;
	return retorno;

&lt;/pre&gt;

== Generar CPF ==
'''Tipo''': Acción &lt;br&gt;
'''Descripción''': no tiene parametros (salida en variable &amp;_resultCC)

&lt;pre&gt;

   var n = 9;
   var n1 = Math.round(Math.random()*n);
   var n2 = Math.round(Math.random()*n);
   var n3 = Math.round(Math.random()*n);
   var n4 = Math.round(Math.random()*n);
   var n5 = Math.round(Math.random()*n);
   var n6 = Math.round(Math.random()*n);
   var n7 = Math.round(Math.random()*n);
   var n8 = Math.round(Math.random()*n);
   var n9 = Math.round(Math.random()*n);
   var d1 = n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;
   d1 = 11 - ( Math.round(d1 - (Math.floor(d1/11)*11)) );

   if (d1&gt;=10) d1 = 0;
   var d2 = d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;
   d2 = 11 - ( Math.round(d2 - (Math.floor(d2/11)*11)) );
   if (d2&gt;=10) d2 = 0;
   retorno = ''+n1+n2+n3+n4+n5+n6+n7+n8+n9+d1+d2;
   return retorno;

&lt;/pre&gt;

== Go To Object ==
'''Tipo''': Evento &lt;br&gt;
'''Descripción''': se pasa por parámetro un nombre de un objeto GeneXus y navega a la url de dicho objeto.

&lt;pre&gt;

if (currentLanguage==&quot;java&quot;) 
{
	window.location=paramJS;
}
else if (currentLanguage==&quot;net&quot;) 
{
	window.location=paramJS+&quot;.aspx&quot;;
}
else
{
	window.alert(&quot;language: &quot; + currentLanguage);
}
result = &quot;OK&quot;;
return result;

&lt;/pre&gt;

== VerifyUrl ==
'''Tipo''': Validacion &lt;br&gt;
'''Descripción''': se pasa por parámetro una url y valida que la url del browser coincida con dicha url

&lt;pre&gt; 
var url=window.document.location.href; 
 if(url.indexOf(paramJS)==-1)
           result = &quot;OK&quot;;
else
        result=&quot;falla&quot;;
&lt;/pre&gt;


== VerifyTitle ==
'''Tipo''': Validacion &lt;br&gt;
'''Descripción''': se pasa por parámetro un titulo y valida que el titulo del browser coincida con el pasado como parámetro.

&lt;pre&gt; 


if (document.location.href.indexOf(paramJS)!=-1)
{
   result = &quot;OK&quot;;
}
else
{
result= &quot;The string (&quot;+paramJS+&quot;) is not in the url (&quot;+document.location.href+&quot;)&quot;;
}
&lt;/pre&gt;




== ClickGridButtons ==
'''Tipo''': Acción &lt;br&gt;
'''Descripción''': Hace click en el paginado automático de una grid de Evolution, se pasa por parámetro &quot;First&quot;, &quot;Previous&quot;, &quot;Next&quot; o &quot;Last&quot;.

&lt;pre&gt; 

function CustomCommand (paramJS, currentGXVersion, currentLanguage)
{

   windows.document.getElementsByClassName(&quot;PagingButtons&quot; + paramJS)[0].click();

   result = &quot;OK&quot;;
   return result;
}
&lt;/pre&gt;



== ClickConfirmPanelDVelop==
'''Tipo''': Acción &lt;br&gt;
'''Descripción''': Hace clic en un botón del UserControl DVelopConfirmPanel. Se debe especificar el texto del botón que se desea presionar (por ejemplo &quot;Yes&quot;, o &quot;No&quot;).

&lt;pre&gt; 

function CustomCommand (paramJS, currentGXVersion, currentLanguage)
{
var button=paramJS;
var buttons = window.document.getElementById('DVELOP_CONFIRMPANEL1Container_ConfirmPanel').children[2].children[0].children;
var selected = -1;
var i = 0;
while (i&lt;buttons.length &amp;&amp; selected==-1) {
  if (buttons[i].innerHTML==button)    { 
     selected = i;   }
  i++;
}
if (selected&gt;-1)
{
  buttons[selected].click();
  result = &quot;OK&quot;;
}
else
{
  result = &quot;The button &quot; + button + &quot; could not be found&quot;;
}
return result;

}
&lt;/pre&gt;



== ClickChangeImage ==
'''Tipo''': Acción &lt;br&gt;
'''Descripción''': Hace clic en un botón Change de un campo multimedia (por ejemplo image), para GeneXus Ev2. Se debe especificar el nombre del atributo o variable de tipo multimedia.&lt;br&gt;
'''Ejemplo''': ClickChangeImage(&quot;ATTRACTIONPHOTO&quot;).&lt;br&gt;

[[Image:GXEv2ImageChangeDelete.png]]

&lt;pre&gt;

function CustomCommand (paramJS, currentGXVersion, currentLanguage)
{

window.document.getElementById(paramJS + '_ct').childNodes[0].focus();
window.document.getElementById(paramJS + '_ct').childNodes[0].click();

   result = &quot;OK&quot;;
   return result;
}

&lt;/pre&gt;


== ClickDeleteImage ==
'''Tipo''': Acción &lt;br&gt;
'''Descripción''': Hace clic en un botón Delete de un campo multimedia (por ejemplo image), para GeneXus Ev2. Se debe especificar el nombre del atributo o variable de tipo multimedia.&lt;br&gt;
'''Ejemplo''': ClickDeleteImage(&quot;ATTRACTIONPHOTO&quot;).&lt;br&gt;

[[Image:GXEv2ImageChangeDelete.png]]

&lt;pre&gt;

function CustomCommand (paramJS, currentGXVersion, currentLanguage)
{

window.document.getElementById(paramJS + '_ct').childNodes[1].focus();
window.document.getElementById(paramJS + '_ct').childNodes[1].click();

   result = &quot;OK&quot;;
   return result;
}

&lt;/pre&gt;


== ClickSubMenuGXUI ==
'''Tipo''': Evento &lt;br&gt;
'''Descripción''': Hace clic en un menú tree de gxui, sobre menús que tengan definido submenús y optiones dentro de éstos. &lt;br&gt;
'''Ejemplo''': ClickSubMenuGXUI(&quot;Gestión Unificada de Clientes/Prospecto Incompleto&quot;).&lt;br&gt;

[[Image:EjemplogxuiSubmenu.PNG]]

&lt;pre&gt;
function CustomCommand (paramJS, currentGXVersion, currentLanguage)
{
  var submenu = paramJS.split('/')[0];
  var opcion = paramJS.split('/')[1];
  var subMenuid = 'ob'+submenu;
  while(subMenuid.indexOf(' ')&gt;0)
    subMenuid = subMenuid.replace(' ','');
  window.document.getElementById(subMenuid).childNodes[0].click();

  var rows = window.document.getElementById(subMenuid+&quot;-body&quot;).childNodes[0].childNodes[0].rows;

  for(i=0; i&lt;rows.length; i++) { 
    if (rows[i].childNodes[0].childNodes[0]!=undefined &amp;&amp; rows[i].childNodes[0].childNodes[0].innerText==opcion ) {
       rows[i].childNodes[0].childNodes[0].click();
    }
  }

   result = &quot;OK&quot;;
   /* It must be returned in result variable the value &quot;OK&quot; if the command executed successufuly, or an error description in other case*/
   return result;
}
&lt;/pre&gt;


Ejemplo:


[[Image:ClickSubMenugxui.PNG]]</rev>
        </revisions>
      </page>
      <page pageid="890" ns="0" title="Requerimientos para la ejecución en Android">
        <revisions>
          <rev contentformat="text/x-wiki" contentmodel="wikitext" xml:space="preserve">{{Idiomas|Requerimientos para la ejecución en Android|Requirements for executing in Android| Android_での実行要件}}

En esta página se listan los requerimientos de software y configuraciones necesarias para poder ejecutar casos de prueba con GXtest (3.0 o mayor) sobre un dispositivo o emulador Android.

== Requerimientos del dispositivo móvil ==
*El sistema operativo instalado en el device o emulador debe ser Android 4.2 o superior.
*Los emuladores soportados son [http://developer.android.com/tools/help/emulator.html el emulador del SDK de Android] y [http://www.genymotion.com/ GenyMotion].

== Requerimientos de software ==
* Android SDK
Componentes que se instalan desde el SDK Manager:
* Android SDK Build-tools
* Android 4.4.2 API 19 (por defecto las aplicaciones GeneXus se generan para la API 19)
* Google Play Services
* Google USB Driver
Recomendado:
* Intel x86 Emulator Accelerator (HAXM installer) - Sólo si se va a ejecutar en un emulador del SDK de Android

== Configuración en GeneXus ==
* La aplicación Android que se probará debe ser generada en modo &quot;Test&quot; en GeneXus. Esto permite que la aplicación Android generada en GeneXus sea automatizable. Para lograr esto es necesario activar la propiedad &quot;Enable Test Mode&quot;:

http://wiki.genexus.com/commwiki/servlet/wiki?Android+Enable+Test+Mode+Property,

En caso de no tener disponible esta propiedad (GeneXus Ev3U2 o U3) es necesario editar el archivo ControlTest.java que se encuentra en la instalación de GeneXus, en el directorio:

Android\FlexibleClient\src\com\artech\ui\test

y descomentar la siguiente línea:
control.setContentDescription(definition.getName());

Este cambio implica que se incluya información sobre el control en el atributo ContentDesc de Android, para que GXtest pueda identificar los controles. Esto no afecta el comportamiento de la aplicación, y puede ser utilizado para aplicaciones de producción.

== Configuración necesaria ==
* Configurar el path al Andorid SDK en GXtest Designer, en el menú Smart Devices -&gt; Configuration
* Luego de configurar el path, al presionar el botón Refresh list aparecerán los emuladores y dispositivos conectados. Allí se podrá elegir uno para indicar donde se ejecutará el caso de prueba
* Indicar la ruta al apk de la aplicación Android en la variable de proyecto 'apkPath'
* Si va a ejecutar en un dispositivo físico, debe tener los [http://developer.android.com/sdk/win-usb.html drivers compatibles], y configurar el dispositivo siguiendo la [http://developer.android.com/tools/device.html documentación de Android]
* Para que la ejecución pueda comenzar sin interacción del usuario sobre el dispositivo o emulador, debe quitarse la pantalla de bloqueo de Android. Esto se puede hacer dentro del dispositivo o emulador, en las Settings de Android -&gt; Security -&gt; Screen Lock -&gt; None, pero puede variar según el dispositivo y versión de Android.


Volver a [[GXtest para Smart Devices]]</rev>
        </revisions>
      </page>
    </pages>
  </query>
</api>