如何通过Selenium C#使用文本查找元素

时间:2019-03-14 14:04:56

标签: c# selenium-webdriver xpath css-selectors xpath-1.0

我有以下html:

<p class="k-reset"><a class="k-icon k-i-expand" href="#" tabindex="-1"></a>Unit: QA Room: 1</p>

我似乎无法获得有效的语法来单击该元素。我尝试了以下方法:

IWebElement webElement5 = Driver.Instance.FindElement(By.XPath("//a[@class='k-icon k-i-expand']"));
webElement5.Click();
IWebElement webElement5 = Driver.Instance.FindElement(By.XPath("//p[text(), 'Unit: QA Room: 1']"));
webElement5.Click();

当我尝试使用text()时,收到一条错误消息,指出它不是有效的XPath表达式。我在互联网上看到的每个地方都使用该语法。我对c#/ Selenium / XPath值非常陌生。 非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您混合了contains

的部分语法
"//p[contains(text(), 'Unit: QA Room: 1')]"

对于直接匹配,请使用=

"//p[text()='Unit: QA Room: 1']"

答案 1 :(得分:-1)

要单击元素,可以使用以下任一解决方案:

  • CssSelector

    var self = Assembly.GetExecutingAssembly().Location;
    
    Console.WriteLine("Press a key to restart...");
    Console.ReadKey();
    
    Process p = new Process();
    p.StartInfo.FileName = self;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardInput = false;
    p.StartInfo.RedirectStandardInput = false;
    p.Start();
    
    Thread.Sleep(500);
    Environment.Exit(0);
    
  • XPath 1

    $('#id-of-form-to-validate').validate({
      ignore: ".ql-container *"
      // continue validation
    });
    
  • XPath 2

    Driver.Instance.FindElement(By.CssSelector("p.k-reset>a.k-icon.k-i-expand")).Click();