#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, а затем щелкнуть по той, у которой есть цветная ссылка. Я не знаю, как искать элемент, который удовлетворяет обоим критериям. Извините, я знаю, что плохо объясняю это!