WebDriver JavaScriptExecutor не нажимает кнопку

Я использую 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 - обычно вы не вкладываете <button> в тег <a>.

kͩeͣmͮpͥ ͩ 29.05.2018 14:33

Идентификатор в HTML - listing-step1, но в вашем коде C# - listingstep1. Это действительно проблема кода или проблема копирования / вставки, когда вы помещаете сюда код.

yong 29.05.2018 14:41

Элементы, которые не могут быть идентифицированы, не вызывают исключение нулевой ссылки. У вас есть проблема где-то еще в вашем коде. Вам следует потратить некоторое время, чтобы отладить свой код и больше узнать, что происходит. Как только вы это сделаете, отредактируйте свой вопрос и добавьте эти детали. Добавьте еще несколько примеров кода того, что вы пробовали. Ссылка на страницу была бы полезна.

JeffC 29.05.2018 14:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
616
2

Ответы 2

Попробуй это,

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>. Разработчики собираются изменить это, и я посмотрю, сработает ли это.

Michael Piraner 29.05.2018 16:43

@MichaelPiraner Существует множество способов решения проблемы, с которой вы сталкиваетесь, и шаги, которые необходимо выполнить, определяются в соответствии с наблюдениями. Если вы можете обновить вопрос, добавив в него последние испытания кода и трассировку стека ошибок, мы наверняка найдем решение.

DebanjanB 31.05.2018 07:47

Другие вопросы по теме