我试图根据属性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>
答案 0 :(得分:6)
根据属性&#34; gl-command&#34;
使用xpathdriver.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')]));
答案 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"));