Selenium — различение между идентичными , C#

#c# #selenium #webdriver #article #tagname

#c# #selenium #webdriver #Статья #tagname

Вопрос:

Я пытаюсь, чтобы моя программа размещалась на веб-странице и ждала появления определенного тега в статье. Проблема в том, что мне нужно, чтобы Selenium проверял, что статья содержит два тега, прежде чем нажимать на нее, вот где я в тупике. То, как я сейчас настраиваю свой код, нигде не щелкает. Я подозреваю, что он просто находится на странице, потому что я пытаюсь найти более одной статьи с одним и тем же основным тегом. Вот HTML:

 <article>
   <div class ="inner-article">
      <a href ="/shop/shirts/iycbmgtqw/x9vdawcjg" style="height:150px;">
         <img alt="Xrtqh7ar444" height="150" src="//d17ol771963kd3.cloudfront.net/120885/vi/xrTQH7Ar444.jpg" width="150">
      </a>
      <h1>
        <a href="/shop/shirts/iycbmgtqw/x9vdawcjg" class="name-link">EXAMPLE_CODE</a>
      </h1>
      <p>
        <a href="/shop/shirts/iycbmgtqw/x9vdawcjg" class="name-link">EXAMPLE_COLOUR</a>
      </p>
   </div>
</article>
 

Все остальные элементы на этой странице имеют идентичный класс, а некоторые имеют идентичные имена тегов. Я хочу выполнить поиск, когда в статье есть определенная комбинация двух тегов. Я понимаю, что XPath — это вариант, но я хотел бы закодировать его, прежде чем узнавать XPath, где имя элемента является единственной доступной информацией.

И вот код, с которым я работаю в данный момент:

 driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromMinutes(10));


IWebElement test = driver.FindElement(By.TagName(textBox12.Text));
test.Click();
 

где textBox12.Text — это «EXAMPLE_CODE». Правильно ли я предполагаю, что WebDriver ничего не нажимает, потому что существует более одного элемента с тегом «EXAMPLE_CODE», и есть ли возможный способ заставить его сначала искать «EXAMPLE_CODE», а затем проверять вторичный: «EXAMPLE_COLOUR»?

Спасибо!!

Ответ №1:

Вы используете By.TagName неправильно. Тег относится к типу элемента, который вы пытаетесь найти. В данном случае для ссылки это ‘a’ . Или в случае div это ‘div’. Правильный способ поиска с помощью тега для ссылки был бы — . By.TagName("a")

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

XPath для получения кода href — //div[class='inner-article']/h1/a[.=EXAMPLE_CODE]

XPath для получения цвета href — //div[class='inner-article']/h1/a[.=EXAMPLE_CODE]/following-sibling::a

Комментарии:

1. Спасибо за ответ! Это имеет смысл, я попробую использовать XPath. Что меня все еще смущает, так это то, как настроить код для использования обоих xpath, чтобы определить, какой webelement выбрать?

2. @ClarkMcMaster Не могли бы вы уточнить, что вас сбивает с толку?

3. Тест IWebElement = драйвер. findElement(By.XPath(«//div[class=’inner-article’]/h1/a[.=EXAMPLE_CODE]»)); test.Click(); Как вы можете видеть, я использую xpath для поиска EXAMPLE_CODE, а затем нажимаю на него. Что я не знаю, как сделать, так это выполнить поиск по всем статьям с помощью EXAMPLE_CODE, а затем щелкнуть по той, у которой есть цветная ссылка. Я не знаю, как искать элемент, который удовлетворяет обоим критериям. Извините, я знаю, что плохо объясняю это!