Как мне написать xpath для узла ниже?

#c# #xpath #selenium-chromedriver

#c# #xpath #selenium-chromedriver

Вопрос:

 <li class="nav-tab" data-li-name="System" data-url="" data-name="System">

<a class="nav_item" data-name="System" href="javascript:;">

    <i class="nav-top-icon customicon icon-settings"></i>
    <span class="nav_item_text">System</span>

</a>
 

Я пытался использовать приведенные ниже параметры, но безуспешно. Я получил ошибку в изображении.

 WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));             
Actions action = new Actions(driver);   
      
IWebElement element=wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("//span[@class='nav_item_text' and text()='System']")));
action.MoveToElement(driver.FindElement(By.XPath("//span[@class='nav_item_text' and text()='System']"))).Build().Perform();    
driver.FindElement(By.XPath("//span[@class='nav_item_text' and text()='System")).Click();  
 

Пробовал xpath и ниже, но безуспешно
//a[@class=’nav_item’][содержит(.,’System’)])1

введите описание изображения здесь

Ответ №1:

Кажется, здесь есть более простой локатор — у вас есть этот data-name="System" атрибут, на котором вы могли бы основывать свой локатор, вместо того, чтобы углубляться в дерево, чтобы проверить текст внутреннего элемента:

 driver.FindElement(By.CssSelector("a.nav_item[data-name=System]"))
 

Или, если вы настаиваете на использовании XPath:

 driver.FindElement(By.XPath("//a[@data-name = 'System']"))