Selenium webdriver(c#)-基于属性查找按钮

8tntrjer  于 2022-12-18  发布在  C#
关注(0)|答案(5)|浏览(155)

我正在尝试基于属性gl-command获取下面按钮的句柄。我知道我可以使用Cssselector by locator找到该按钮,但我不想在这种情况下这样做。
我应该指出,这只是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>
wr98u20j

wr98u20j1#

根据属性“gl-command”使用xpath

driver.FindElement(By.XPath("//*[@gl-command='transaction']")).Click();
5m1hhzi4

5m1hhzi42#

您还可以使用返回所需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"))
0ejtzxu1

0ejtzxu13#

XPath是最安全的选择。

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

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

lskq00tm

lskq00tm4#

不确定您是否要求查找一个按钮,如果它具有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));

我的亲密父母可能会因为我在床上用手机把这些都打出来而不高兴,但这只是大致的要点,而我的女朋友正在大声叫我睡觉。

von4xj4u

von4xj4u5#

如果其中一个类是唯一的,则可以使用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"));

相关问题