Код selenium не щелкает соответствующий объект в приложении

<div id=":tabs-innerCt" data-ref="innerCt" role="presentation" class="x-box-inner x-box-menu-body-horizontal" style="width: 217px; height: 30px;">
<div id=":tabs-targetEl" data-ref="targetEl" class="x-box-target" role="presentation" style="width: 181px;">
<a 
class="x-btn x-unselectable x-box-item x-toolbar-item x-btn-gw-top-menu-toolbar-small gw-top-menu-selected" hidefocus="on" unselectable="on" id="TabBar:AdminTab" tabindex="-1" componentid="TabBar:AdminTab" style="right: auto; top: 0px; margin: 0px; left: 0px;">
<span id="TabBar:AdminTab-btnWrap" data-ref="btnWrap" role="presentation" unselectable="on" style="" class="x-btn-wrap x-btn-wrap-gw-top-menu-toolbar-small x-btn-split x-btn-split-right">
<span id="TabBar:AdminTab-btnEl" data-ref="btnEl" role="presentation" unselectable="on" style="" class="x-btn-button x-btn-button-gw-top-menu-toolbar-small x-btn-text    x-btn-button-center ">
<span id="TabBar:AdminTab-btnIconEl" data-ref="btnIconEl" role="presentation" unselectable="on" class="x-btn-icon-el x-btn-icon-el-gw-top-menu-toolbar-small  " style="">
</span>
<span id="TabBar:AdminTab-btnInnerEl" data-ref="btnInnerEl" unselectable="on" class="x-btn-inner x-btn-inner-gw-top-menu-toolbar-small">Adminis<span class="g-underlined">t</span>ration</span>

</span>
</span>
</a>

Я новичок в Selenium. Я пытался автоматизировать сценарий в приложении. Я обнаружил трудности с выполнением сценария. Я закодировал, как показано ниже:

driver.findElement(By.id("TabBar:AdminTab-btnInnerEl")).click();

Однако этот объект не идентифицируется во время выполнения.

Не могли бы вы помочь мне в этом отношении. Спасибо

Enter image description here

Прочтите, почему возникает ошибка скриншот HTML, кода или ошибки - плохая идея. Рассмотрите возможность обновления вопроса, добавив в него соответствующий HTML-код на основе форматированного текста, пробные версии кода и трассировку стека ошибок.

DebanjanB 31.10.2018 12:22

Хорошо. Думал будет проще. Вот код. <span id = "TabBar: AdminTab-btnInnerEl" data-ref = "btnInnerEl" unselectable = "on" class = "x-btn-inner x-btn-inner-gw-top-menu-toolbar-small"> Админис < span class = "g-underlined" id = "ext-element-86"> t </span> ration </span>

Prakash S 31.10.2018 15:59

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

DebanjanB 31.10.2018 16:01

Есть ли исключения? Если ваш локатор (By.id) неправильный, вы должны получить исключение ElementNotFound. Однако, если вы не получаете никаких исключений, но ваш щелчок не работает так, как вы ожидали, это может быть связано с тем, что есть несколько элементов, соответствующих вашему локатору, или щелчок выполняется слишком быстро (пока страница не загрузится должным образом)

Vladimir Efimov 31.10.2018 16:12
0
4
140
1

Ответы 1

Это может быть потому, что идентификатор, который вы ищете, содержит символ ":". Пытаться

WebDriverWait wait = new WebDriverWait(driver, 10);
By locator = By.xpath("//span[contains(@id, 'AdminTab-btnInnerEl') and contains(@text, 'Adminis')]"));
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(locator);
element.click();

Я нашел это полезными:

Нажмите кнопку с XPath, содержащим частичный идентификатор и заголовок в Selenium IDE

elementToBeClickable условие

Спасибо за ответ. Но это не работает. Для одной и той же вкладки существует 4 разных идентификатора. 2 вкладки для администрирования и 2 вкладки для раскрывающегося списка. Либо я получаю сообщение «Элемент не найден», либо элемент не взаимодействует.

Prakash S 02.11.2018 14:30

@PrakashS обновил мой ответ запросом xPath, который будет принимать элемент с идентификатором, содержащим «AdminTab-btnInnerEl», и текст, содержащий «Adminis». Да, это довольно уродливо и не очень спасает от изменений пользовательского интерфейса, но все же может быть полезно для решения вашего конкретного случая.

Vladimir Efimov 02.11.2018 15:40

Я снова получил сообщение об ошибке: «нет такого элемента: невозможно найти элемент: {« метод »:« xpath »,« селектор »:« // span [содержит (@id, 'AdminTab-btnInnerEl') и содержит (@ текст, 'Админис')] "}". Похоже, это сложно.

Prakash S 02.11.2018 16:16

Привет Владимир, работает. Я дал Thread.sleep (5000); Похоже, для загрузки страницы требуется некоторое время. Спасибо за поддержку. Thread.sleep (5000); driver.findElement (By.xpath ("// * [@ id = 'TabBar: AdminTab-btnInn‌ erEl']")). click (); Thread.sleep (5000);

Prakash S 05.11.2018 14:13

Спящие @PrakashS подходят для быстрого разрешения, но они недостаточно надежны. Я обновил свой ответ предпочтительным решением, используя ожидания. Если это сработает для вас, отметьте ответ как «принятый», чтобы другие увидели, что это помогает решить вашу проблему.

Vladimir Efimov 06.11.2018 08:40

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