prefacio
Selenium es un proyecto de código abierto que puede automatizar el funcionamiento de los navegadores. El propósito original es automatizar las pruebas de las funciones del navegador, pero con el desarrollo del proyecto, las personas también lo utilizan para hacer algunas funciones más interesantes de acuerdo con sus características. es una herramienta de prueba automatizada para la interfaz de usuario. Como se describe en el sitio web oficial de Selenium, Selenium puede automatizar la manipulación del navegador. ¡Se acabó! Lo que quieras hacer con sus habilidades depende totalmente de ti.
Escenas a utilizar
Hay tres escenarios para las pruebas automatizadas de los navegadores:
- Selenium WebDriver: si desea crear pruebas y suites de automatización de regresión sólidas basadas en el navegador, escalar y distribuir scripts en muchos entornos, entonces necesita usar Selenium WebDriver, un conjunto de enlaces específicos del idioma para controlar los navegadores: eso es lo que significa conducir
- Selenium IDE: si desea crear secuencias de comandos rápidas de reproducción de errores, crear secuencias de comandos para ayudar a automatizar las pruebas exploratorias, entonces desea utilizar Selenium IDE; Complementos de Chrome, Firefox y Edge que permiten el registro y la reproducción simples
- Selenium Grid: si desea escalar y administrar múltiples entornos desde un punto central distribuyendo y ejecutando sus pruebas en varias máquinas para que pueda ejecutar fácilmente pruebas en una gran cantidad de combinaciones de navegador/SO, entonces necesita usar Selenium Grid
principio
El propósito de Selenium temprano era realizar pruebas de automatización de UI de aplicaciones web. El método de implementación era inyectar js a través de un servidor de tres partes para lograr el propósito de controlar el comportamiento del navegador. El componente central se llama Selenium-RC (control remoto), que consta de dos partes:
- Una biblioteca para escribir la lógica del navegador de control en el lado del cliente
- Implementa un servidor que controla el inicio y apagado del navegador
La estructura es la siguiente
Esta arquitectura resultó ser compleja y tenía muchas limitaciones, tales como:
- arquitectura compleja
- Ejecutar scripts de prueba lleva mucho tiempo porque Selenium RC usa comandos de JavaScript como instrucciones para el navegador. Esto puede conducir a un rendimiento deficiente
- La API no está muy orientada a objetos
- Los navegadores HTMLUnit sin cabeza no son compatibles (navegadores invisibles)
Las limitaciones de Selenium RC llevaron al desarrollo de un nuevo marco de automatización, Selenium WebDriver. Después de la introducción de WebDriver en 2006, los problemas complejos en RC se pueden resolver y resolver. Selenium combinado con WebDriver simplifica el comportamiento de control del navegador, elimina el servidor en el enlace central y controla directamente el navegador localmente a nivel del sistema. La arquitectura optimizada de la siguiente manera:
Preparación ambiental
Si no desea implementar sus funciones en la capa de codificación, puede descargar el complemento Selenium IDE , que admite la reproducción de grabaciones y la exportación de scripts de procesos.
Si necesita implementar funciones personalizadas más flexibles a través del código, se recomienda usar python y preparar python3 y pip3 para el entorno.
brew install python3
selenio
pip3 install selenium
instalar controladores de navegador configura su sistema para permitir la automatización del navegador. A través de WebDriver, Selenium admite todos los principales navegadores del mercado, como Chrome/Chromium, Firefox, Internet Explorer, Edge, Opera y Safari. Siempre que sea posible, WebDriver utiliza el soporte de automatización integrado del navegador para controlar el navegador.
desarrollar
primer guion
Controle la función de acceso automático del navegador a través de webdriver
def test_eight_components():
driver = webdriver.Chrome()
driver.get("https://google.com")
title = driver.title
assert title == "Google"
driver.implicitly_wait(0.5)
search_box = driver.find_element(by=By.NAME, value="q")
search_button = driver.find_element(by=By.NAME, value="btnK")
search_box.send_keys("Selenium")
search_button.click()
search_box = driver.find_element(by=By.NAME, value="q")
value = search_box.get_attribute("value")
assert value == "Selenium"
driver.quit()
API de controlador web
La API de webDriver para manipular el navegador se puede dividir aproximadamente en dos partes, controlar el comportamiento del navegador, como abrir, cerrar, avanzar, retroceder, actualizar, etc., y controlar los elementos de la página, como hacer clic, ingresar y obtener el contenido del elemento, etc.
navegador
Obtener información del navegador
// title
driver.getTitle();
// url
driver.getCurrentUrl();
navegación
//打开
driver.get("https://selenium.dev");
//跳转
driver.navigate().to("https://selenium.dev");
// 后退
driver.navigate().back();
// 前进
driver.navigate().forward();
// 刷新
driver.navigate().refresh();
caja de balas
//根据条件找到页面中的弹框并点击
driver.findElement(By.linkText("See an example alert")).click();
//等待弹框展示并保存到变量中
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
//获得弹框内容文本
String text = alert.getText();
//点击确定按钮
alert.accept();
Las funciones de alerta, confirmación y solicitud similares a las cookies pueden admitir la adición y eliminación de cookies.
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
public class addCookie {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
try {
driver.get("http://www.example.com");
// Adds the cookie into current browser context
driver.manage().addCookie(new Cookie("key", "value"));
} finally {
driver.quit();
}
}
}
Frames admite la adquisición y operación de elementos en Frames. Windows WebDriver no distingue entre ventanas y pestañas. Si su sitio abre una nueva pestaña o ventana, Selenium le permitirá usar el identificador de ventana para manejarlo. Cada ventana tiene un identificador único que permanece constante dentro de una sola sesión. Puede obtener el identificador de ventana de la ventana actual con:
driver.getWindowHandle();
elemento
Identificación y uso de elementos en el DOM Gran parte del código de Selenium implica trabajar con elementos web. Esta parte de la función es similar al document.getElementById de escribir el código front-end. La idea es relativamente simple. Es encontrar los elementos en la página y luego realizar la operación de simulación del comportamiento del usuario. Admite posicionamiento absoluto y estrategias de posicionamiento relativo. No es bueno para ID de página, etiquetas y clases complejas. Puede usar el método xPath para el posicionamiento, que es muy flexible. De hecho, no necesita memorizarlo de memoria. Cuando un determinado elemento no es fácil de localizar, puedes ir a la web oficial para comprobar la API para conseguirlo.
posicionamiento relativo
def relative():
# Above
email_locator = locate_with(By.TAG_NAME, "input").above({By.ID: "password"})
# Below
password_locator = locate_with(By.TAG_NAME, "input").below({By.ID: "email"})
# Left of
cancel_locator = locate_with(By.TAG_NAME, "button").to_left_of({By.ID: "submit"})
# Right of
submit_locator = locate_with(By.TAG_NAME, "button").to_right_of({By.ID: "cancel"})
# Near
email_locator = locate_with(By.TAG_NAME, "input").near({By.ID: "lbl-email"})
# Chaining relative locators
submit_locator = locate_with(By.TAG_NAME, "button").below({By.ID: "email"}).to_right_of({By.ID: "cancel"})
posicionamiento tradicional
<ol id="vegetables" style="margin-top: 20px">
<li class="potatoes">potatoes</li>
<li class="onions">onions</li>
<li class="tomatoes"><span>Tomato is a Vegetable</span></li>
</ol>
<ul id="fruits">
<li class="bananas"></li>
<li class="apples"></li>
<li class="tomatoes"><span>Tomato is a Fruit</span></li>
</ul>
def finders():
# Evaluating entire DOM
vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
print(vegetable)
# Evaluating a subset of the DOM
fruits = driver.find_element(By.ID, "fruits")
fruit = fruits.find_elements(By.CLASS_NAME, "tomatoes")
print(fruit)
# Optimized locator
fruit = driver.find_element(By.CSS_SELECTOR, "#fruits .tomatoes")
fruit2 = driver.find_element(By.CSS_SELECTOR, "ul .tomatoes")
print(fruit == fruit2) # True
# All matching elements
plants = driver.find_elements(By.TAG_NAME, "li")
print(plants)
# Get all the elements available with tag name 'p'
elements = driver.find_elements(By.TAG_NAME, 'span')
for e in elements:
print(e.text)
def xPath():
ol = driver.find_element(By.XPATH, "/html/body/div/div/ol[1]")
ol2 = driver.find_element(By.XPATH, "//ol[1]")
ol3 = driver.find_element(By.XPATH, "//ol[@id='vegetables']")
print(ol == ol2) # True
print(ol == ol3) # True
onions = driver.find_element(By.XPATH, "//ol[1]/li[2]")
print(onions.text)
Interactúa con 5 comandos básicos:
- clic (cualquier elemento)
- enviar claves (solo para bloques de texto y elementos editables de contenido)
- claro (igual que arriba)
- enviar (elemento de formulario)
- seleccionar (seleccionar elemento de la lista)
Obtener información del elemento
Resumir
Este intercambio presenta escenarios de uso de Selenium, principios simples y algunos usos básicos. Y citó un pequeño ejemplo. Después de dominar el contenido anterior, ya puede implementar pruebas básicas de automatización de la interfaz de usuario. Además, los requisitos para las herramientas que pueden hacer algunos rastreadores y automatizar la manipulación del navegador deben personalizarse de acuerdo con los escenarios individuales. Siempre que tenga una naturaleza "perezosa", creo que encontrará muchos escenarios interesantes para usarlo.
Finalmente: para retribuir a los fanáticos acérrimos, he compilado un video tutorial de aprendizaje de prueba de software completo para usted. Si lo necesita, puede obtenerlo gratis 【保证100%免费】
subprograma de entrevista de prueba de software
¡El banco de preguntas de prueba de software maximizado por millones de personas! ! ! ¡Quién es quién sabe! ! ! El mini programa de cuestionarios más completo de toda la red, puedes usar tu teléfono móvil para hacer los cuestionarios, en el metro o en el autobús, ¡enróllalo!
Se cubren las siguientes secciones de preguntas de la entrevista:
1. Teoría básica de las pruebas de software, 2. web, aplicación, pruebas de funciones de interfaz, 3. red, 4. base de datos, 5. linux
6. web, aplicación, automatización de interfaz, 7. pruebas de rendimiento, 8. conceptos básicos de programación, 9. preguntas de la entrevista de hora, 10. preguntas de prueba abiertas, 11. pruebas de seguridad, 12. conceptos básicos de informática
Cómo obtener el conjunto completo de información: