2016-04-05 9 views
3

Ich versuche, einen Griff auf die Schaltfläche unten basierend auf dem Attribut gl-command. Ich bin mir bewusst, dass ich den Button mit einem Cssselector Locator finden kann, aber das möchte ich in diesem Fall nicht tun.Selen-Webdriver (C#) - Finding-Taste basierend auf Attribut

Ich möchte darauf hinweisen, dass dies nur eine von vielen Tasten innerhalb der AUT ist: <google-componentbutton size="32"></google-componentbutton>

<div class="gl-component-buttons"><gl-component-buttons id="gl-component-button-set-bottom"> 
    <google-componentbutton size="32"> 
    <button class="google-componentbutton glmdl-button glmdl-js-button glmdl-js-ripple-effect google-image gl-transaction-image" style="height: 32px; widgl: 32px; background-size: 24px 24px; background-position: 4px 4px;" gl-tooltip-id="google_component_transaction" gl-tooltip="transaction" data-upgraded=",MaterialButton,MaterialRipple" gl-command="transaction"> 
     <span class="glmdl-button__ripple-container"> 
     <span class="glmdl-ripple"></span> 
     </span> 
    </button> 
    </google-componentbutton> 

Antwort

4

Verwendung von XPath für basierend auf dem Attribut „gl-Befehl“

driver.FindElement(By.XPath(“//*[@gl-command='transaction']”)).Click(); 
+1

... oder '// button [@ gl-command = 'transaction']' –

0

Wenn einer die Klasse ist einzigartig Sie className

driver.FindElement(By.ClassName("google-componentbutton")); 
// or 
driver.FindElement(By.ClassName("glmdl-button")); 
// etc 

Wenn kein verwenden können ne von ihnen einzigartig können Sie Kombination aus allen von ihnen verwenden oder einige von ihnen

driver.FindElement(By.CssSelector(".google-componentbutton.glmdl-button.glmdl-js-button.glmdl-js-ripple-effect.google-image.gl-transaction-image")); 
// or 
driver.FindElement(By.CssSelector(".google-componentbutton.glmdl-button")); 
1

XPath würde Ihre sicherste Wette.

IWebElement glButton = driver.findElement(By.xpath("//button[contains(@gl-command, 'transaction')])); 

Es gibt eine ähnliche Frage hier: http://forum.testproject.io/index.php?topic=66.0

+0

Tks das war genau das, was ich gesucht habe +1 –

1

Nicht sicher, ob Sie eine Taste zu finden sind, zu fragen, ob er den gl-Befehl Attribut oder wenn der Wert des gl-Befehl hat einige bestimmten Wert, so I Werde in beide Richtungen antworten.

Suche Tasten mit gl-Befehl Attribut

driver.FindElements(By.Tag("button")).Where(x => !string.IsNullOrEmpty(x.GetAttribute("gl-command")).FirstOrDefault(); 

Kann das FirstOrDefault() entfernen, wenn Sie alle Tasten mit dem Attribut gl-Befehl soll.

Suche Tasten mit spezifischem gl-Befehlswert

driver.FindElements(By.Tag("button")).Where(x => !string.IsNullOrEmpty(x.GetAttribute("gl-command") && string.Compare(x.GetAttribute("gl-command"), "YOURGLCMD", StringComparison.OrdinalIgnoreCase) == 0)); 

Mein Schluss Pars könnte ausgeschaltet sein, weil ich im Bett das alles auf meinem Telefon eingegeben, aber das ist der allgemeine Kern und mein gf schreit auf Ich gehe schlafen.

+0

toll das hat für mich funktioniert, danke – Sherlock

2

Sie können auch einen eigenen Selektor mit einer Methode erstellen, die durch den Wähler für die einfache Zukunft wie diesen benötigt zurückgibt:

public static By SelectorByAttributeValue(string p_strAttributeName, string p_strAttributeValue) 
{ 
    return (By.XPath(String.Format("//*[@{0} = '{1}']", 
            p_strAttributeName, 
            p_strAttributeValue))); 
} 

Und es wie folgt verwenden:

driver.FindElement(Selectors.SelectorByAttributeValue("data-power","5")) 
Verwandte Themen