tomar - Tome la captura de pantalla de las opciones en el menú desplegable de selenio c#
como tomar captura de pantalla en computadora (3)
Para abrir el menú desplegable, solo tiene que hacer .Click()
el elemento. Entonces en tu caso,
IWebElement element = Driver.FindElement(By.Id("carsId"));
element.Click();
ampliará el menú desplegable. El problema es que la funcionalidad de captura de pantalla de Selenium no captura el menú desplegable abierto. Puedes evitar eso usando .NET para simplemente tomar una captura de pantalla de la ventana activa. Código de ejemplo de trabajo a continuación.
static void Main(string[] args)
{
IWebDriver Driver = new FirefoxDriver();
Driver.Navigate().GoToUrl("http://www.tutorialspoint.com/html/html_select_tag.htm");
Driver.Manage().Window.Maximize();
IWebElement element = Driver.FindElement(By.Name("dropdown"));
element.Click();
TakeScreenShotOfWindow(@"C:/sshot.png");
}
// from http://stackoverflow.com/a/363008/2386774
public static void TakeScreenShotOfWindow(string filePath)
{
// Create a new bitmap.
var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
// Create a graphics object from the bitmap.
var gfxScreenshot = Graphics.FromImage(bmpScreenshot);
// Take the screenshot from the upper left corner to the right bottom corner.
gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
// Save the screenshot to the specified path that the user has chosen.
bmpScreenshot.Save(filePath, ImageFormat.Png);
}
Me gustaría capturar la captura de pantalla de las opciones que se muestran en el menú desplegable con selenio c # al igual que la imagen que se muestra a continuación.
He intentado varias formas de tomar la captura de pantalla. Básicamente, tengo que expandir el menú desplegable del elemento para capturar la captura de pantalla. Esto es lo que hice
//#1
var element = Driver.FindElement(By.Id("carsId"));
Actions builder = new Actions(Driver);
builder.SendKeys(element, Keys.LeftAlt + Keys.Down).Build().Perform();
//#2
Actions act = new Actions(Driver);
act.MoveToElement(element).Build().Perform();
La primera implementación para presionar las teclas Alt + Abajo funcionaba manualmente cuando lo hacía en el sitio pero no funcionaba a través del selenio. La segunda implementación tampoco funcionó. También probé el método builder.ClickAndHold()
también.
Y tengo otra pregunta aquí. ¿Es realmente posible que el selenio haga clic y se expanda por un tiempo hasta que agarre la pantalla?
Cualquier ayuda sería muy apreciada.
Es realmente fácil de hacer SIN HERRAMIENTAS ADICIONALES, créanme.
Todo lo que necesita es hacer los siguientes pasos después de hacer clic en Seleccionar elemento:
- Hacer captura de pantalla de la página
- Obtenga su posición Seleccionar elemento (sus coordenadas en la página)
- Obtener la última posición del elemento Opción
- Obtener el último tamaño del elemento Opción
Crea un nuevo rectángulo con la misma posición que has seleccionado y
var screenshotSize = lastOption.Position - Select.Position;
screenShotSize.height + = lastOption.Size.Height;
Cortar todo excepto este rectángulo de la captura de pantalla
En el caso de c #, puede usar para # 6 el siguiente código
Bitmap ScreenshotOfSelect = browserScreenshot.Clone(new Rectangle(point, size), screen.PixelFormat);
Y como resultado, recibirá un mapa de bits que contiene exactamente solo Select = expandido)
así que, como ven, es realmente muy fácil de hacer =) Y no necesitan ninguna herramienta, excepto el selenio. Y también la ventana del navegador puede ser invisible en este momento (como ejemplo en caso de usar phantomJS)
No creo que sea posible para los menús desplegables normales. Dado que la superposición con las opciones que puede elegir se muestran dentro de un control nativo y fuera del contexto con el que puede trabajar el selenio. Para esto, necesitará algún proceso o herramienta por separado que pueda capturar la captura de pantalla del escritorio o la aplicación.
Ahora, para capturar la captura de pantalla de escritorio / aplicación, usamos objetos Robot en Java.
Para C #, puede usar los métodos sugeridos en Capture screenshot of active window? .
Código de muestra del robot:
try {
//Get the size of the screen stored in toolkit object
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
//Create Rectangle object using height and width of screen
//Here entire screen is captured, change it if you need particular area
Rectangle rect = new Rectangle(0, 0, d.width, d.height);
//Creates an image containing pixels read from the screen
Robot r = new Robot();
BufferedImage img = r.createScreenCapture(rect);
//Write the above generated buffered image to a file
File f = new File("myimage.jpg");
//Convert BufferedImage to a png/jpg image
ImageIO.write(img, "jpg", f);
} catch (Exception e) {
System.out.println(e.getMessage());
}
Esto tomará la captura de pantalla de toda la pantalla y la guardará en el archivo en la ubicación del archivo dado.
Selenium solo puede tomar una captura de pantalla de las opciones en los menús desplegables personalizados hechos con Javascript / CSS y no en el menú desplegable de selección.
Avíseme si el código anterior funciona o si necesita más ayuda.