Селениум Хромедрайвер не может найти элемент по LinkText, но Geckodriver делает - PullRequest
0 голосов
/ 28 сентября 2018

Итак, элемент, по которому я хочу щелкнуть, находится здесь:

<li class=" ">
    <a href="google.de">
        <i class="fa fa-lg fa-fw fa-profile"></i>&nbsp;
        <span class="menu-item-parent ">Mein Konto</span>
    </a>
</li>

Теперь у меня настроен следующий код Java:

WebElement konto = driver.findElement(By.xpath("//*[contains(text(),'Mein Konto')]"));

и

WebElement konto1 = driver.findElement(By.linkText("Mein Konto"));

Но в Chrome Driver он не может найти элемент:

org.openqa.selenium.NoSuchElementException: нет такого элемента: Невозможно найти элемент: {"method": "текст ссылки"," selector ":" Mein Konto "}

xpath работает нормально, но для моей команды тестировщиков было бы проще использовать linktext, поэтому я пытаюсь использовать его вместо xpath.

Ответы [ 4 ]

0 голосов
/ 28 сентября 2018

DOM такой,

<a href="google.de">
  <i class="fa fa-lg fa-fw fa-profile"></i>&nbsp;
    <span class="menu-item-parent ">Mein Konto</span>
</a>

Просто «Mein Konto» - это не только текст ссылки.Это будет частичный текст ссылки, так как &nbsp также там.Я предлагаю использовать частичный текст ссылки.

driver.findelement(By.partialLinkText("Mein Konto"));

РЕДАКТИРОВАТЬ:

Я хочу выделить комментарий Андерсона

Наличие пробелов в тексте ссылки не является причиной для использованияпоиск по partialLinkText.Просто скопируйте текст ссылки с отображаемой веб-страницы (не с консоли разработчика Chrome) и перейдите на By.linkText().Это может выглядеть как driver.findElement(By.linkText(" Mein Konto")) ;.Но если вы уверены, что на странице с подстрокой Mein Konto нет других ссылок, то By.partialLinkText в порядке.

0 голосов
/ 28 сентября 2018

Метод linkText соответствует точно тексту, появляющемуся на странице.Это не совсем точно может быть связано с проблемой рендеринга браузера.Вы можете попробовать с Parital текст ссылки.

0 голосов
/ 28 сентября 2018

Поскольку «Mein Konto» - это не весь ваш LinkText, а внутри элемента <span>, вы не можете использовать By.linkText();, потому что добавлено &nbsp.В этом случае вы используете By.PartialLinkText();, чтобы найти элемент.

0 голосов
/ 28 сентября 2018

Элемент <span> содержит текст «Mein Konto»

, если ваш элемент <a href='#'>Mein Konto</a>, то вы можете найти его с помощью By.linkText ();

Здесь вы можетеузнать больше, как работает локатор:

https://www.softwaretestingmaterial.com/how-to-locate-element-by-link-text-and-partial-link-text-locator/

...