Selenium webdriver(c#) - 根据属性查找按钮

时间:2016-04-05 11:44:25

标签: c# selenium selenium-webdriver webdriver

我试图根据属性gl-command处理下面的按钮。我知道我可以通过定位器使用Cssselector找到按钮,但在这种情况下我不想这样做。

我应该指出,这只是AUT中许多按钮之一:<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>

5 个答案:

答案 0 :(得分:6)

根据属性&#34; gl-command&#34;

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

答案 1 :(得分:2)

您还可以使用一种方法创建一个自定义选择器,该方法返回您需要的By选择器,以便日后使用,如下所示:

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

并像这样使用它:

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

答案 2 :(得分:1)

XPath将是您最安全的选择。

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

这里有一个类似的问题:http://forum.testproject.io/index.php?topic=66.0

答案 3 :(得分:1)

不确定是否要求找到一个按钮,如果它有gl-command属性,或者gl-command的值是某个特定值,那么我将回答这两种方法。

使用gl-command属性查找按钮

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

如果您希望所有按钮都具有gl-command属性,则可以删除FirstOrDefault()

查找具有特定gl命令值的按钮

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

我的关闭parens可能会关闭,因为我在床上的手机上输入了所有这些,但这是一般的要点,我的gf正在叫我去睡觉。

答案 4 :(得分:0)

如果其中一个类是唯一的,您可以使用className

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

如果它们都不是唯一的,您可以使用所有这些或其中一些的组合

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"));