Как найти элемент с помощью текста через Selenium C # - PullRequest
0 голосов
/ 14 марта 2019

У меня есть следующий 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 ]

2 голосов
/ 14 марта 2019

Вы смешали частичный синтаксис contains

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

Для прямого совпадения =

"//p[text()='Unit: QA Room: 1']"
0 голосов
/ 14 марта 2019

Для нажатия на элемент вы можете использовать любое из следующих решений:

  • CSSSelector

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

    Driver.Instance.FindElement(By.XPath("//p[@class='k-reset']/a[@class='k-icon k-i-expand']")).Click();
    
  • XPath 2 :

    Driver.Instance.FindElement(By.XPath("//p[@class='k-reset' and normalize-space()='Unit: QA Room: 1']")).Click();
    
...