selenium - найти ссылку href - невозможно найти элемент с текстом ссылки

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

Я получаю следующую ошибку: если я использую linktext(), чтобы найти ссылку спецификации

Ошибка :

Unable to find element with link text == Specifications

person priya    schedule 19.07.2018    source источник


Ответы (2)


В соответствии с HTML, которым вы поделились, если linktext() показывает ошибку как:

Error : Unable to find element with link text == Specifications

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

  • linkText:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Specifications"))).click();    
    
  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("td.subtabTxtNsel>a.subtabTxtNsel[tag='a']"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//td[@class='subtabTxtNsel']/a[@class='subtabTxtNsel' and contains(.,'Specifications')]"))).click();
    
person DebanjanB    schedule 19.07.2018
comment
спасибо за работу с текстом ссылки и xpath, не работает с селектором css, как мы можем определить, когда нам нужно использовать функцию webdriverwait(), пожалуйста, предложите - person priya; 19.07.2018
comment
@priya Согласно HTML, который вы предоставили, атрибут элемента содержал JavaScript. Таким образом, естественно, элемент представлен JavaScript, который может быть обновлен/отредактирован с помощью JS. поэтому вам нужно дождаться, пока JS правильно загрузит элемент, и для этого вам нужно использовать функцию webdriverwait(). - person DebanjanB; 19.07.2018
comment
привет сегодня, когда я запустил код текста ссылки с помощью WebDriverWait, он не работает, получая ошибку org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание, когда элемент будет доступен для клика: By.partialLinkText: спецификации (пробовали в течение 20 секунд с 500 МИЛЛИСЕКУНДами) интервал) в org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:80) - person priya; 20.07.2018
comment
org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание, когда элемент будет доступен для клика: By.linkText: спецификации (попытка длилась 20 секунд с интервалом 500 МИЛЛИСЕКУНД) на org.openqa.selenium.support.ui.WebDriverWait. timeoutException(WebDriverWait.java:80) - person priya; 20.07.2018

Проблема в том, что вы используете спецификации, но это спецификации.
Просто с большой буквы S все должно работать нормально.

Вы можете использовать явное ожидание, например:

new WebDriverWait(driver,20).until(ExpectedConditions.elementToBeClickable(By.linkText("Specifications"))).click();  

ИЛИ с частичным текстом ссылки :

 new WebDriverWait(driver,20).until(ExpectedConditions.elementToBeClickable(By.partialLinkText("Specifications"))).click();  

Если оба они по-прежнему не работают, вы можете попробовать этот xpath :

//td[@class='subtabTxtNsel']/a[text()='Specifications' and @tag='a']  

Ваш язык привязки не указан, я предоставил ответ на JAVA.

ОБНОВЛЕНИЕ:

Явное ожидание — это код, который вы определяете для ожидания наступления определенного условия, прежде чем продолжить код. В худшем случае это Thread.sleep(), который устанавливает условие на точный период времени ожидания. Есть несколько удобных методов, которые помогут вам написать код, который будет ждать ровно столько времени, сколько потребуется. WebDriverWait в сочетании с ExpectedCondition — один из способов достижения этого.

Перейдите по этой ссылке для лучшего понимания.

person cruisepandey    schedule 19.07.2018
comment
спасибо, что он работает с явным ожиданием linktext(), не работает с заданным xpath, подскажите, как определить, что требуется явное ожидание? - person priya; 19.07.2018
comment
спасибо с linktext () вчера он работал, но сегодня я получил ошибку - org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание того, что элемент будет доступен для клика: By.partialLinkText: спецификации (пробовал в течение 20 секунд с 500 Интервал MILLISECONDS) в org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:80) - person priya; 20.07.2018
comment
org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание, когда элемент будет доступен для клика: By.linkText: спецификации (попытка длилась 20 секунд с интервалом 500 МИЛЛИСЕКУНД) на org.openqa.selenium.support.ui.WebDriverWait. timeoutException(WebDriverWait.java:80) - person priya; 20.07.2018
comment
что происходит, когда вы пытаетесь использовать частичный текст ссылки? - person cruisepandey; 20.07.2018
comment
попробовал ту же ошибку - ожидаемое условие не выполнено: ожидание того, что элемент будет доступен для клика: By.linkText: спецификации (попытка в течение 20 секунд с интервалом 500 МИЛЛИСЕКОНД) - person priya; 20.07.2018
comment
Можете ли вы сказать мне свои шаги вручную? Или можно поделиться с нами URL-адресом веб-приложения здесь? - person cruisepandey; 20.07.2018
comment
это просто щелчок по ссылке, не могу поделиться - person priya; 20.07.2018
comment
Видна ли эта ссылка в пользовательском интерфейсе, когда вы пытаетесь с ней взаимодействовать? - person cruisepandey; 20.07.2018