Desde dentro de mi aplicación, quiero acceder a un sitio web y luego realizar la acción del usuario. Actualmente estoy usando webview, pero creo que webdriver será fácil de usar y tendrá un enfoque correcto.
Código actual:
WebView browser = (WebView) view.findViewById(R.id.webview); browser.getSettings().setJavaScriptEnabled(true); browser.getSettings().setDomStorageEnabled(true); browser.getSettings().setUserAgentString(`"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36");` browser.setWebViewClient(new MyBrowser()); browser.loadUrl("https://myurl.com");
Problemas con el código actual: es difícil enviar almacenes de claves o usar Xpath.
¿Qué estoy buscando? Ingrese al sitio web usando el controlador y luego haga clic en los botones, etc. Pseudocódigo de la siguiente manera:
chat=driver.find_element_by_xpath("/html/somepath") chat.click() time.sleep(2) search=driver.find_element_by_xpath("/html/body/div[1]/div/div/div[2]/div[1]/span/div/span/div/div[1]/div/label/input") search.click()
Entiendo que esto es posible usando selenium/appium. Pero lo que estoy confundido es que selenium/appium también necesita un servidor que se ejecute en una máquina separada. Quiero ejecutar todo el código en mi aplicación sin un servidor externo ni más aplicaciones.
¿Puedo simplemente agregar lib que me da acceso a apis como mostré arriba?
Puede usar Selenium
o Appium
sin ningún servidor. Ambos son complementos, lo que significa que son básicamente código abierto o bibliotecas. Usted llama a esos objetos en su máquina local (o teléfono), no llama a una API remota en línea.
Selenium y Appium ayudan a encontrar elementos en una página web o para encontrar elementos dentro de una aplicación móvil. No hay absolutamente ninguna necesidad de un servidor aquí o una máquina remota.
Entonces, SÍ , solo agregue la lib que le da acceso a las api
como mostró arriba.
Selenium en su forma básica no necesita ningún servidor separado para ejecutarse. Selenium junto con su amplia gama de herramientas y bibliotecas que pueden admitir la automatización de navegadores web dentro de la misma máquina (es decir, localhost ).
En el núcleo de Selenium se encuentra WebDriver , una interfaz para escribir conjuntos de instrucciones que se pueden ejecutar de manera intercambiable en muchos navegadores utilizando el soporte nativo de cada navegador para la automatización de pruebas. Esto se puede lograr en tres sencillos pasos:
Bloque de código de ejemplo:
System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver"); WebDriver driver = new FirefoxDriver(); driver.get("https://www.amazon.com/"); driver.findElement(By.cssSelector("input.nav-input[value='Go']")).click();
Sin embargo, Selenium también admite un servidor de distribución para escalar la asignación del navegador. Si su caso de uso incluye pasos para ejecutar pruebas en paralelo en varias máquinas, entonces Selenium Grid sería su mejor opción.
Selenium Grid permite la ejecución de scripts de WebDriver en máquinas remotas (virtuales o reales) mediante el enrutamiento de comandos enviados por el cliente a instancias de navegador remotas. Su objetivo es proporcionar una manera fácil de ejecutar pruebas en paralelo en varias máquinas.
Selenium Grid también le permitiría ejecutar pruebas en paralelo en varias máquinas y administrar diferentes versiones y configuraciones del navegador de forma centralizada (en lugar de en cada prueba individual).
Habiendo dicho eso, resuelve un subconjunto de problemas comunes de delegación y distribución, pero es posible que no pueda administrar su infraestructura y que no se adapte exactamente a sus necesidades específicas.
Del mismo modo,Appium es una herramienta de código abierto para automatizar aplicaciones nativas, web móviles e híbridas en plataformas móviles iOS, móviles Android y de escritorio Windows. Las aplicaciones híbridas que tienen un envoltorio alrededor de una webview
son un control nativo que permite la interacción con el contenido web. Proyectos como Apache Cordova facilitan la creación de aplicaciones utilizando tecnologías web que luego se agrupan en un contenedor nativo, creando una aplicación híbrida.
Según su pregunta y su comentario de respuesta a la respuesta proporcionada por @undetectedSelenium, se aplican las siguientes suposiciones:
Instale selenium como parte de su proyecto:
<dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.1.2</version> </dependency> </dependencies>
Bloque de código de muestra basado en su código psuedo y la respuesta proporcionada por @undetectedSelenium
System.setProperty(“webdriver.chrome.driver”, “C:\\path\\to\\chromedriver.exe”); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption(“androidPackage”, “com.android.chrome”); // By default if the following option is not applied, selenium will take the 1st available // node provided by the adb server if multiple android devices are attached options.setExperimentalOption("androidDeviceSerial", deviceId); WebDriver driver = new ChromeDriver(options); driver.get("https://www.amazon.com/"); driver.findElement(By.cssSelector("input.nav-input[value='Go']")).click();
La variable deviceId
debe contener el uuid enumerado como un dispositivo del servidor adb para el dispositivo en particular bajo prueba, es decir
options.setExperimentalOption("androidDeviceSerial", 95s572sp0478);
También necesitará el Chromedriver correcto para su dispositivo Android. Compruebe la versión del navegador Chrome instalada en el dispositivo y descargue el controlador correcto desde aquí para su máquina con Windows Chromedriver Downloads . Luego colóquelo en su directorio deseado y agregue la ruta del directorio en el código.