Komplikationen mit Selen die GetAttribute-Methode

Ich habe vor kurzem versucht, auf selenium RC ist GetAttribute Methode, sondern rannte sofort zu einer Herausforderung. Ich habe versucht, führen Sie ein sehr einfaches selenium.GetAttribute("//a/@href") aber den code warf einen SeleniumException mit der Meldung "ERROR: could not find element-Attribut: //a/@href".
Durch die Substitution selenium.GetText("//a[@href]") an die Stelle der GetAttribute rufen, habe ich bestätigt, dass es ein element war definitiv vorhanden, da diese Anweisung ordnungsgemäß zurückgegeben, wird der text des Links.

Habe ich dann versucht:

  • den Verweis auf eine andere web-Seite mit einem anderen Protokoll (file:///vs http://) - das gleiche problem.
  • mit einem anderen xpath-locator verweist auf ein anderes Attribut-das gleiche problem.
  • mit einem DOM-locator selenium.GetAttribute("document.getElementsByTagName('a')[0].getAttribute('href')") - das gleiche problem; etwas andere Fehlermeldung (und die Fehlermeldung fehlt die abschließende Klammer): "FEHLER: Element Dokument.getElementsByTagName('a')[0].getAttribute('href' nicht gefunden". Beachten Sie, dass genau dieser Ausdruck korrekt funktioniert in Firebug-Konsole.
  • die Verwendung von absoluten statt relativen xpath-Adressierung, mit selenium.GetText("xpath=/html/body/a[@href]") zu bestätigen die Existenz und dann selenium.GetAttribute("xpath=/html/body/a/@href") um die Attribut-und es funktionierte!

Während das Handbuch erklärt deutlich, dass relative xpath-locators nicht eine explizite locator-Typ (D. H. die "xpath=" Präfix) es ist still über absolute xpath-locators; ich interpretiere daraus, dass der Präfix ist erforderlich. Aber aus Neugier, ging ich zurück zu meinen verwandten Ausdruck und fügte hinzu, die explizite Präfix--ändern selenium.GetAttribute("//a/@href") zu selenium.GetAttribute("xpath=//a/@href") -- und das klappte auch!

Schließlich, meine Experimente mit dem sehr handlichen Finden Schaltfläche in Selenium IDE zeigen, dass es nicht in Ordnung mit Elementen scheitert aber mit Parametern. Ich kann verstehen, dass es nicht sinnvoll ist, markieren Sie ein Attribut, da Attribute nicht sichtbar sind Elemente einer Seite, aber warum nicht markieren Sie das element, das das Attribut enthält, und machen es in einer anderen Farbe? Vielleicht nicht eine einfache Aufgabe...

Meine Fragen:

Ich destilliert die Ergebnisse der oben genannten Experimente, die nach unten auf diese Fragen; das ist der ganze Sinn meines posting hier! Jede dieser scheint mir ein bug aber lassen Sie mich wissen, wenn Sie denken, dass mein Sprachgebrauch ist falsch-oder gibt es einen workaround:

  1. Warum GetAttribute mit einem XPath-locator-Typ eindeutig erfordern eine explizite locator geben, wenn andere Methoden (z.B. GetText) nicht?
  2. Warum hat der DOM locator fehl mit 'nicht gefunden' - Fehler? (Das Handbuch ist auch klar, dass DOM-locators tun nicht bedürfen einer ausdrücklichen locator-Typ-Präfix, aber ich habe dennoch versucht, indem "dom=" als Präfix auf dem DOM testen; es noch nicht.)
  3. Warum Selenium IDE nicht scheitern, mehr anmutig, wenn Sie versuchen, zu markieren (Finden) ein Attribut? Mit der gleichen "xpath=//a/@href" locator, drücken Sie die Find-Taste Erträge diese hässliche Fehlermeldung: "[Fehler] locator nicht gefunden: xpath=//a/@href, Fehler = [Exception... "Konnte nicht konvertiert JavaScript-argument arg 0 [inIFlasher.scrollElementIntoView]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: chrome://selenium-ide/content/selenium-runner.js :: showElement :: Linie 386" data: no]"

Ihre Eingabe ist auch für die beantragte Folgendes: das Muster, Das ich wollte, für jeden test hier wurde (A) GetText(locator-für-element-mit-Attribut), um zu bestätigen, die Anwesenheit von dem element, dann (B) GetAttribute(locator-für-Attribut-selbst). Der 6 slots in der Tabelle unten habe ich gelöst, 3 von Ihnen erfolgreich wie nur ausführliche, und eine 4. scheint ein Fehler zu sein. Gibt es Lösungen für die beiden verbleibenden slots?

Typ GetText GetAttribute 
XPath //a[@href] " xpath=//a/@href 
CSS CSS=a[href] ?? 
DOM ?? Dokument.getElementsByTagName('a')[0].getAttribute('href') 

(Details: Selenium RC version 1.0.3, Browser: Firefox 3.6.13, Mein Ziel von code in C#)

Schreibe einen Kommentar