Selenium NoSuchElementException в поле ввода - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь отправить ключи в поле ввода через Java Selenium. Я получаю NoSuchElementException каждый раз. Я также попробовал все из этого решения: NoSuchElementExeption, селен не может найти элемент . Заранее спасибо!

driver.findElement(By.xpath("//input[@class='pull-left ng-pristine ng-validng-empty ng-touched']")).sendKeys(t + Keys.ENTER);

<input class="pull-left ng-pristine ng-valid ng-empty ng-touched" ng-model="TagInputCtrl.tagInput" uib-typeahead="tagSuggestion for tagSuggestion in TagInputCtrl.getTagSuggestions($viewValue)" select-on-comma="" select-on-whitespace="" select-on-blur="" typeahead-focus-first="false" tag-select="TagInputCtrl.onEnter" tag-select-model="ngModel" sprd-max-input-length="50" ng-show="ngModel.length < TagInputCtrl.validatorOptions.tags.max" ng-focus="TagInputCtrl.focused = true" ng-blur="TagInputCtrl.focused = false" aria-autocomplete="list" aria-expanded="false" aria-owns="typeahead-4377-3960" style="" type="text"/>

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

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

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.pull-left.ng-pristine.ng-valid.ng-empty.ng-touched[ng-model^='TagInputCtrl']"))).sendKeys("Tim");
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='pull-left ng-pristine ng-valid ng-empty ng-touched'][contains(@ng-model,'TagInputCtrl')]"))).sendKeys("Tim");
    
0 голосов
/ 04 сентября 2018

Может быть две вещи для NoSuchElementException:

  1. Ваш локатор неверен.

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

//input[contains(@class,'pull-left ng-pristine ng-valid ng-empty ng-touched') and @ng-model='TagInputCtrl.tagInput' and @ng-focus='TagInputCtrl.focused = true']  

Ваша веб-страница интегрирована с Angular. Таким образом, предоставляемый xpath должен работать.

  1. Ваш входной тег может быть в iframe / frame / frameset .

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

для переключения вы можете попробовать этот код:

driver.switchTo().frame(name_or_id)  

Как правило, тег iframe содержит атрибут name или id, в случае, если оба они недоступны, вы можете продолжить с

driver.switchTo().frame(index)  

или

driver.switchTo().frame(iframe_element)  

Здесь iframe_element является веб-элементом.

Надеюсь, это поможет.

...