Vinnaren i pepparkakshustävlingen!
2018-04-13, 15:49
  #1
Medlem
Hej!

Jag vill börja med att säga att kodandet är väldigt nytt för mig så jag förstår inte allt för avancerade svar men jag försöker lära mig och bli bättre. Därmed vill jag i förhand be om ursäkt om jag använder något ordval fel nedan, du får gärna rätta mig om så är. Det jag kommer fråga om nedan är säkert superenkelt för den kunnige...

Hur som så håller jag på med att skapa några automatiska testfall (via Coded UI i Visual Studio) för webbGUItestning.
Jag har gjort över 40st testfall och ska in med säkert 60st till. I början av varje testfall har jag denna kod för att starta webbläsaren:

Kod:
var Browser BrowserWindow.Launch("http://testsite1.se");

            
Browser.Maximized true

VS projektet är uppdelat på 3 sätt kan man säga:
* 1 fil innehåller alla objekt (t.ex knappar, länkar)
* 1 fil innehåller alla funktioner (t.ex klick, droplistväljare)
* 1 fil där testfallet skrivs (varje testfall är en egen fil givetvis)

Objekten lägger jag in såhär:

Kod:
public static HtmlInputButton EnKnapp(UITestControl browser)

        {

            
HtmlInputButton EnKnapp = new HtmlInputButton(browser);

            
EnKnapp.SearchProperties.Add(HtmlInputButton.PropertyNames.Id"KnappId123");

            return 
EnKnapp;

        } 

Funktionerna lägger jag in såhär:

Kod:
public static void ClickButton(TestContext TestContextHtmlInputButton obj)

        {

            
Mouse.Click(obj);

        } 

I själva testfallet skriver jag sedan såhär för att använda funktion och objekt:

Kod:
Funktion.ClickButton(TestContextObjekt.EnKnapp(Browser)); 

Det jag skulle vilja göra är att flytta browserLaunchern till funktionsfilen så att jag kan anropa den i början av testfallet lika enkelt precis som jag gör när jag använder t.ex ClickButton funktionen som ovan exempel, och dessutom endast ha ett ställe att ändra testURL på vid behov.
(Det börjar kännas lite okontrollerbart att köra "replace all" på över 40 filer när jag vill ändra testURL.)

Jag tänker mig att man borde kunna göra något liknande i funktionsfilen:

Kod:
public static void LaunchBrowser()

        {

            
BrowserWindow.Launch("http://testsite1.se");
            
Browser.Maximized true;

        } 

Och sedan använda den i början av testfallet genom något så enkelt som t.ex:

Kod:
Funktion.LaunchBrowser(); 

Men det jag inte förstår och som ställer till det är det här (browser) som ligger på objekten i objektfilen samt efter objekten i testfallen.
Jag är som sagt nybörjare på detta men är väldigt tacksam för en hint eller exempel på hur man kan göra om detta för att få till mitt önskemål...
Citera
2018-04-13, 18:46
  #2
Medlem
tj.s avatar
Jag är inte helt med på din kodstruktur, men ett enkel lösning på ditt problem är att introducera en factory eller liknande för att hjälpa dig att skapa upp en Browser. Det gör att du får ett samlat ställe där du skapar upp browsern.
Kod:
public static class BroswerTestHelper
{
    public static 
Broswer GetBrowser()
    {
        const 
string url "http://testsite1.se";
        var 
browser BrowserWindow.Launch(url);
        
brow.Mamimized true;
        return 
browser;
    }
}

public class 
SomeTests
{
    public 
void SomeTest()
    {
        var 
browser BroswerTestHelper.GetBrowser();
        
// gör dina testfall med din browser här...
    
}

    public 
void SomeOtherTest()
    {
        var 
browser BroswerTestHelper.GetBrowser();
        
// gör dina testfall med din browser här...
    
}

Citera
2018-04-14, 00:38
  #3
Medlem
Citat:
Ursprungligen postat av tj.
Jag är inte helt med på din kodstruktur, men ett enkel lösning på ditt problem är att introducera en factory eller liknande för att hjälpa dig att skapa upp en Browser. Det gör att du får ett samlat ställe där du skapar upp browsern.
Kod:
public static class BroswerTestHelper
{
    public static 
Broswer GetBrowser()
    {
        const 
string url "http://testsite1.se";
        var 
browser BrowserWindow.Launch(url);
        
brow.Mamimized true;
        return 
browser;
    }
}

public class 
SomeTests
{
    public 
void SomeTest()
    {
        var 
browser BroswerTestHelper.GetBrowser();
        
// gör dina testfall med din browser här...
    
}

    public 
void SomeOtherTest()
    {
        var 
browser BroswerTestHelper.GetBrowser();
        
// gör dina testfall med din browser här...
    
}


Tack så mycket för att du försöker hjälpa mig

Jag förstår hur din lösning är tänkt att fungera men studion klagar på ditt första stycke tyvärr, varför gör den det?

http://oi64.tinypic.com/11ruo8y.jpg

(Får man länka skärmdumpar uppladdade på tinypic?)
Citera
2018-04-14, 10:08
  #4
Medlem
tj.s avatar
Citat:
Ursprungligen postat av blk
Tack så mycket för att du försöker hjälpa mig

Jag förstår hur din lösning är tänkt att fungera men studion klagar på ditt första stycke tyvärr, varför gör den det?

http://oi64.tinypic.com/11ruo8y.jpg

(Får man länka skärmdumpar uppladdade på tinypic?)
Därför att du har slarvat. Det är skillnad på små och stora bokstäver.
Citera
2018-04-15, 23:19
  #5
Medlem
Citat:
Ursprungligen postat av tj.
Därför att du har slarvat. Det är skillnad på små och stora bokstäver.

Ursäkta min okunnighet, men att ändra till ett stort B i första 'browser' ger samma klagomål tyvärr.
Var det något annat du syftade på gällande gemener/versaler?
Citera
2018-04-16, 17:43
  #6
Medlem
tj.s avatar
Citat:
Ursprungligen postat av blk
Ursäkta min okunnighet, men att ändra till ett stort B i första 'browser' ger samma klagomål tyvärr.
Var det något annat du syftade på gällande gemener/versaler?
Ja, det var det jag syftade på. Det ska stå Browser med stort B. BrowserWindow verkar ligga i namespace Microsoft.VisualStudio.TestTools.UITesting. Har du inkluderat den i filen?
Kod:
using Microsoft.VisualStudio.TestTools.UITesting
Edit: Insåg att klassen heter BrowserWindow och inte Browser. Det ska så klart stå
Kod:
public static BrowserWindow GetBrowser() 

    const 
string url "http://testsite1.se"
    var 
browser BrowserWindow.Launch(url); 
    
browser.Mamimized true
    return 
browser

__________________
Senast redigerad av tj. 2018-04-16 kl. 17:46.
Citera
2018-04-16, 21:43
  #7
Medlem
Citat:
Ursprungligen postat av tj.
Ja, det var det jag syftade på. Det ska stå Browser med stort B. BrowserWindow verkar ligga i namespace Microsoft.VisualStudio.TestTools.UITesting. Har du inkluderat den i filen?
Kod:
using Microsoft.VisualStudio.TestTools.UITesting
Edit: Insåg att klassen heter BrowserWindow och inte Browser. Det ska så klart stå
Kod:
public static BrowserWindow GetBrowser() 

    const 
string url "http://testsite1.se"
    var 
browser BrowserWindow.Launch(url); 
    
browser.Mamimized true
    return 
browser


Fantastiskt! Nu verkar det fungera som jag drömt om
Tusen tack för din hjälp!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback