2017-06-30 7 views
2

Ich prüfe, ob Elemente auf der Seite wie //img oder //i über ein alt-Attribut verfügen.Testen, ob ein WebElement-Attribut mit Selenium Webdriver existiert

Ich kann keinen Weg finden zu erkennen, wenn das Attribut überhaupt nicht existiert.

Hier ist das WebElement. Nur ein IMG ohne Alt-Attribut.

<img class="gsc-branding-img" src="https://www.google.com/cse/static/images/1x/googlelogo_grey_46x15dp.png" srcset="https://www.google.com/cse/static/images/2x/googlelogo_grey_46x15dp.png 2x"/> 

Hier ist mein Code, der versucht, die Existenz der alt festzustellen. Ich weiß, es ist nicht alles notwendig, ich habe nur alles versucht.

WebElement we == driver.findElement(By.xpath("(//img)[1]")); 
String altAttribute = we.getAttribute("alt"); 

if(altAttribute == null || altAttribute =="" || altAttribute == " ") 
    { 
    //attribute not found 
    } 

Es scheint, wie es eine leere Zeichenfolge zurückkehrt ... Um zum Beispiel des folgenden Code „beforeAfter“

System.out.println("before"+altAttribute+"After"); 

jedoch meine if Aussage nicht fängt die Rückkehr, so dass ich don Ich weiß nicht, was ich tun soll. Hier

Antwort

2

Anstatt das Attribut zu prüfen, sollten Sie listet die Elemente mit dem fehlenden Attribut mit einem Selektor auf:

List<WebElement> elems = driver.findElements(By.cssSelector("img:not([alt])")); 

if (elems.size() > 0) { 
    // found images with alt attribute missing 
} 
0

ist die Antwort auf Ihre Frage:

Versuchen Sie, die WebElement durch einige andere xpath zu finden wie folgt:

WebElement we = driver.findElement(By.xpath("(//img[@class='gsc-branding-img']")); 

oder

WebElement we = driver.findElement(By.xpath("//img[contains(@src,'googlelogo_grey_46x15dp.png')]")); 

Lassen Sie mich wissen, ob dies Ihre Frage beantwortet.

+0

Danke. Das würde in meinem Beispiel funktionieren. Aber ich durchlaufe tatsächlich eine Liste von Bildern 'Liste allImages = driver.findElements (By.xpath (" // img "));' und ich muss überprüfen, ob sie alle ein alt-Attribut haben, also kann ich nicht Isoliere jedes mit einem anderen XPath. Ich hätte in meinem Beispiel genauer sein sollen. – dsidler

0

Ich denke, Sie müssen zuerst den Nullwert behandeln. if(null == we.getAttribute("alt")){ }

1

wenn das Attribut nicht vorhanden ist, sollte es zurückgeben null, wenn es vorhanden ist und nicht gesetzt, dann wird es leeren String zurück. Ich denke, das ist in deinem Beispiel der Fall, wenn ja. Dann sollten Sie equal Methode verwenden, um Zeichenfolge anstelle von == Operator zu vergleichen.

Unten Beispiel ist etwa Google-Suchfeld, xxx Attribut ist für Suchfeld nicht vorhanden und so wird es zurückgeben null

driver = new ChromeDriver(); 
    driver.get("http://google.com"); 
    WebElement ele = driver.findElement(By.name("q")); 
    String attr = ele.getAttribute("xxx"); 
    if (attr == null){ 
     System.out.print("Attribute does not exist"); 
    } 

    else if (attr.equals("")){ 
     System.out.print("Attribute is empty string"); 
    } 

Sie können es selbst ausprobieren, indem Sie den folgenden HTML-Schreiben und Speichern es als Test.html:

<html> 
    <head> 
    </head> 
    <body> 
     <p id="one">one</p> 
     <p id="two" data-se="">two</p> 
     <p id="three" data-se="something">three</p> 
    </body> 
</html> 

Dann einen Web-Treiber Skript schreiben, das wie folgt aussieht:

driver.get("file:///<PATH_TO_HTML_ABOVE>/test.html"); 

WebElement one = driver.findElement(By.id("one")); 
WebElement two = driver.findElement(By.id("two")); 
WebElement three = driver.findElement(By.id("three")); 

System.out.println("Does one have the data-se attribute?: '" + one.getAttribute("data-se") + "'"); 
System.out.println("Does two have the data-se attribute?: '" + two.getAttribute("data-se") + "'"); 
System.out.println("Does three have the data-se attribute?: '" + three.getAttribute("data-se") + "'"); 

dem Sie die folgende Ausgabe erhalten:

Does one have the data-se attribute?: 'null' 
Does two have the data-se attribute?: '' 
Does three have the data-se attribute?: 'something' 
+0

Doppelt überprüft und das ist 100% korrekt für Chrome und Firefox – Ardesco

Verwandte Themen