2016-10-12 4 views
1

Ich habe Probleme, Selen-Webtreiber zu bekommen, um einen Teil eines Overlays zu identifizieren und anzuklicken, der angezeigt wird, wenn ich zu www.oneplace.com navigiere. Das Overlay soll beim Anklicken ausgeblendet werden. Siehe unten für meinen SelencodeSelen scheint ein Overlay nicht zu erkennen

IWebDriver wd = new ChromeDriver(); 
try {  
    wd.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(7)); 
    wd.Navigate().GoToUrl("https://www.google.co.uk/); 
    wd.Navigate().GoToUrl("http://www.oneplace.com/"); 
    wd.FindElement(By.Id("takeoverOverlay")).Click(); 

    if (!wd.FindElement(By.TagName("html")).Text.Contains("DONATE")) { 
     Console.Error.WriteLine("verifyTextPresent failed"); 
    } 
} 
finally { wd.Quit(); } 

Antwort

1

Wenn Sie Szenarien automatisieren, automatisieren Sie, was ein Benutzer tun würde. Was würde ein Benutzer tun, um das Popup zu schließen? Sie würden auf das X oben rechts klicken. Klicken Sie mit der rechten Maustaste auf dieses Element in Ihrem Browser und wählen Sie Inspect (oder was auch immer die Variation in Ihrem Lieblingsbrowser ist). Das Element, das ist X ist

<img class="closeTakeover" ... src="http://cdn.salemweb.net/zcast/shared/close-btn.png?v=1"> 

So können wir Code wie folgt verwenden, um es zu schließen.

wd.FindElement(By.CssSelector("img.closeTakeover")).Click(); 

Ein paar zusätzliche Kommentare ...

  1. Warum navigieren Sie zu Google und dann Oneplace? Sie sollten in der Lage sein, die erste Navigation zu entfernen?

  2. Ich würde vorschlagen, dass Sie die impliziten Wartezeiten entfernen und nur explizite Wartezeiten verwenden.

  3. Sie wollen nicht wirklich den gesamten Text der Seite (HTML) suchen, der nach DONATE sucht. Es könnte im Namen eines Buches oder Artikels sein und Sie melden einen Pass, wenn es eigentlich ein Fehler sein sollte. Suchen Sie nach dem bestimmten Element, von dem Sie erwarten (oder nicht erwarten), dass es DONATE enthält, und suchen Sie nur den Text dieses Elements, z. Der folgende Code bestätigt, dass DONATE nicht im oberen Navigationsbereich angezeigt wird.

    if (!wd.FindElement(By.CssSelector("nav")).Text.Contains("DONATE")) 
    
+0

Hallo Jeff, sehr schätzen Ihre Antwort und Beratung. Ihre Lösung funktioniert gut. Das sind nur frühe Tage für mich mit Selen. Ich denke, einige dieser Overlays haben kein X in der rechten Ecke. Außerdem steht es einem Benutzer frei, das Overlay auf schnellstmögliche Weise zu schließen. Ich frage mich, ob es eine Lösung für das anfängliche Problem gibt, einfach auf einen Teil der Overlay-Transparenz zu klicken, um das Overlay zu schließen. – olusegun

+0

Wenn Sie Selenium sagen, auf ein Element zu klicken, wird es auf die Mitte dieses Elements klicken. Wenn das Element die Größe des Browserfensters hat und sich das Popup im Allgemeinen in der Mitte befindet, müssen Sie Selenium "helfen", wo Sie möchten. Sie können dies mit 'Actions' und' MoveToElement' mit einem Offset tun und auf eine beliebige Stelle auf dem Bildschirm klicken. Je nachdem, wo Sie klicken möchten, müssen Sie einige Berechnungen durchführen, damit Sie nicht vom Bildschirm oder Browser abklicken. – JeffC

+0

Jackpot. Vielen Dank für diesen Bro. – olusegun

Verwandte Themen