# 14.2.2 Agregando el proyecto de pruebas de usuario

Agregamos un proyecto de Pruebas, ahora será **NUnit**, los 3  (NUnit, XUnit, MSTest) manejan los mismos conceptos, solo cambia poco la sintaxis.

Tecleamos el nombre CaducaRest.UITest

Agregamos los siguientes paquetes:

```
Install-Package Selenium.WebDriver
```

Agregamos el navegador chrome

```
Install-Package Selenium.WebDriver.ChromeDriver
```

Con este paquete podemos acceder a elementos como combos (select en html)

```
Install-Package Selenium.Support
```

Modificamos la prueba por lo siguiente, primero indicamos que será un navegador de Chrome, luego indicamos que deseamos ir a la página de google.com

Los pasos que una persona realizaría son:

1. Abrir el navegador
2. Ir a la página de [www.google.com](http://www.google.com)
3. Puedes comprobar que estas en la página de Google viendo su logo. Si inspeccionas la imagen ves que su id es **hplogo** y que tiene un atributo llamado **Google**

![](https://3731331968-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKmGSg4qhizjqeDPHJC%2F-LstlgEV9YyWo2TZJxN6%2F-LstmgA3YTfejzgeUgup%2Fimage.png?alt=media\&token=2f4d8093-65b4-4a61-9de7-58c02179c26e)

El código de la prueba sería el siguiente. Renombra el archivo UnitTest1 por GoogleTest&#x20;

{% code title="GoogleTest.cs" %}

```csharp
public class Tests : IDisposable
{
    private  IWebDriver _driver;
    [SetUp]
    public void Setup()
    {
        _driver = new ChromeDriver();
    }
  
    [Test]
    public void TestGoogle()
    {
        _driver.Navigate().GoToUrl("http://www.google.com");
        Assert.That("Google Search", 
           Is.EqualTo(_driver.FindElement(By.Name("btnK")).GetAttribute("value")));
    }
    public void Dispose()
    {
        _driver.Quit();
        _driver.Dispose();
    }
}

```

{% endcode %}

Si corremos la prueba vemos que se abre una ventana de Chrome y se cambia a la página de [www.google.com](http://www.google.com) con una advertencia de que un software de prueba está controlando Chrome

![](https://3731331968-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKmGSg4qhizjqeDPHJC%2F-LsoQzRcWs8WplEqrOJs%2F-LsoRY3ffRISK-rbMixC%2Fimage.png?alt=media\&token=90790081-1ee0-439e-9232-b3f1eeb5f5c5)

{% hint style="info" %}
Si luego google cambia el id o el atributo la prueba dejaría de funcionar, por ejemplo a veces pone doodles o una imagen para conmemorar un evento importante
{% endhint %}

### Agregando Screenshots

Puedes tomar screenshoots de la página que estas probando por ejemplo si ocurrió algún error en la prueba, al terminar la prueba, puedes integrar la prueba a AzureDevOps y el screenshoot se agregará como Attachment, la configuración de las pruebas se verá mas adelante.

Agrega el siguiente código para tomar un ScreenShot

```csharp
public void TakeScreenShoot()
{
    var screenImage = System.IO.Path.Combine
    (TestContext.CurrentContext.TestDirectory, 
     Guid.NewGuid().ToString() + ".png");       
    ((ITakesScreenshot)_driver).GetScreenshot()
        .SaveAsFile(screenImage, ScreenshotImageFormat.Png);
    //Agrega la imagen al contexto de la prueba para que sea
    //mostrada posteriormente como attachment
    //en Azure DevOps
    TestContext.AddTestAttachment(screenImage);
}
```

Una vez que configuras la integración continua en Azure DevOps queda de la siguiente manera, esto se verá mas adelante ya que las pruebas con selenium se deben ejecutar después del release. A continuación se muestra el lugar donde se guardan las imágenes en Azure Devops

![](https://3731331968-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKmGSg4qhizjqeDPHJC%2F-M-a5fVmilc4OZejPiJk%2F-M-a7PX7AXXoUefiNSOA%2Fimage.png?alt=media\&token=23b7d24f-eedb-4b99-9069-e143d9e51cba)
