Транспортир может найти элемент, но используя .click (); вызывает его не найти - PullRequest
0 голосов
/ 28 июня 2018

У меня проблема с тем, что я могу заставить свой xpath показывать ноль ошибок в тестовом скрипте, если я использую .isPresent (); чтобы убедиться, что элемент находится на странице, но я получаю ошибки, указывающие, что xpath не может быть найден, если я вместо этого использую команду «click». Здесь xpath работает:

element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i')).isPresent();

Здесь xpath

element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i')).click();

Результаты в

Не удалось: элемент не найден с помощью локатора: By (xpath, // * [@ id = "layout-padding"] / ui-view / layout-authen / ui-view / div / div [2] / scroll- детектор / настройки сечение [8] / дел [1] / A / I)

Поиск относительного xpath для текста (что, вероятно, более безопасно с точки зрения будущих изменений, нарушающих его), например, element(by.xpath('.//*[.="TextIWant"]')).isPresent(); работает с isPresent(), но не с .click().

Я пробовал разные инструменты xpath (в Chrome и Firefox плюс надстройка), чтобы проверить xpath, но результат тот же. Почему это может найти элемент, но ошибка при нажатии на него? Этот сценарий находит и нажимает на несколько других элементов, прежде чем он достигнет этой точки. Что мне нужно сделать, чтобы щелкнуть мышью по элементу, который, по-видимому, МОЖЕТ найти?

Вот элемент, который я скопировал:

div class="header"

a href="" class="toggle-bt ng-binding" ng-click="view.showContent = !view.showContent"
    i class="fa fa-angle-right" ng-class="view.showContent ? 'fa-angle-down' : 'fa-angle-right'" style=""></i>
    TextIWant
</a>

<div class="description ng-binding">
    Settings for the TextIWant
</div>
</div>

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Возможно, элемент не будет кликабельным при попытке щелкнуть по нему. Попробуйте это:

var EC = protractor.ExpectedConditions;
var elm = element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i'));
browser.wait(EC.elementToBeClickable(element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i'))), 30000, "Element is not clickable").then(function() {
   elm.click();
});
0 голосов
/ 02 июля 2018

Попробуйте с ожиданием и исполнителем JavaScript:

 var elm = element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i'));
browser.wait(EC.elementToBeClickable(element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i'))), 30000, "Element is not clickable").then(function() {
   browser.executeScript('arguments[0].click()', elm);
});
0 голосов
/ 29 июня 2018

пожалуйста, попробуйте ниже

driver.findElement(By.cssSelector("div.header div.description"))).isPresent(); driver.findElement(By.cssSelector("div.header div.description"))).click();

см. Ниже для получения дополнительной информации о css-селекторах http://www.seleniumeasy.com/selenium-tutorials/css-selectors-tutorial-for-selenium-with-examples

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...