Я использую Selenium WebDriver с C# и NUnit.
В тестируемом приложении есть кнопка, которую Selenium не распознает. Я пробовал все обычные локаторы, включая различные операторы XPath, Id, CSSSelector и т. д. Во всех случаях возникает NullReferenceException.
Затем я попробовал следующее:
IJavaScriptExecutor javaScript = (IJavaScriptExecutor)Driver.Instance;
javaScript.ExecuteScript("document.getElementById('listingstep1').click();
Это также приводит к NullReferenceException. Остальные кнопки в приложении можно нажимать без ошибок.
Эта конкретная кнопка выглядит следующим образом:
<div class = "space-top-4 mdl-layout__canvas-action-hide-sm">
<a id = "listing-step1" href = "javascript:void(0)">
<button class = "mdl-button md-min mdl-color--blue mdl-color-text--white mdl-js-button mdl-button--raised mdl-js-ripple-effect" data- upgraded = ",MaterialButton,MaterialRipple">
NEXT
<span class = "mdl-button__ripple-container">
<span class = "mdl-ripple"></span>
</span>
</button>
</a>
</div>
Идентификатор в HTML - listing-step1, но в вашем коде C# - listingstep1. Это действительно проблема кода или проблема копирования / вставки, когда вы помещаете сюда код.
Элементы, которые не могут быть идентифицированы, не вызывают исключение нулевой ссылки. У вас есть проблема где-то еще в вашем коде. Вам следует потратить некоторое время, чтобы отладить свой код и больше узнать, что происходит. Как только вы это сделаете, отредактируйте свой вопрос и добавьте эти детали. Добавьте еще несколько примеров кода того, что вы пробовали. Ссылка на страницу была бы полезна.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуй это,
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", driver.findElement(By.id('listing-step1')));
Чтобы вызвать Click() на кнопке с текстом СЛЕДУЮЩИЙ, вам нужно вызвать WebDriverWait, и вы можете использовать следующий блок кода:
new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//button[@class='mdl-button md-min mdl-color--blue mdl-color-text--white mdl-js-button mdl-button--raised mdl-js-ripple-effect']//span[@class='mdl-button__ripple-container']/span[@class='mdl-ripple']"))).Click();
Я обычно так и делаю, но в данном случае это не помогает - спасибо. Я использую этот метод для каждого другого объекта, и он отлично работает. Думаю, это может быть связано с тем, что кнопка вложена в тег <a>. Разработчики собираются изменить это, и я посмотрю, сработает ли это.
@MichaelPiraner Существует множество способов решения проблемы, с которой вы сталкиваетесь, и шаги, которые необходимо выполнить, определяются в соответствии с наблюдениями. Если вы можете обновить вопрос, добавив в него последние испытания кода и трассировку стека ошибок, мы наверняка найдем решение.
Для меня это не похоже на действительный html - обычно вы не вкладываете
<button>в тег<a>.