我尝试通过Java Selenium将Keys发送到输入字段。我每次都会收到NoSuchElementException。我还尝试了此解决方案中的所有内容:NoSuchElementExeption, selenium unable to locate element。预先感谢!
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"/>
答案 0 :(得分:0)
NoSuchElementException
可能有两件事:
如果是这种情况,那么您可以尝试使用此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应该可以工作。
如果是这种情况,那么我建议您将驱动程序的焦点切换到特定的iframe,以与欲望元素进行交互。
要进行切换,您可以尝试以下代码:
driver.switchTo().frame(name_or_id)
通常, iframe 标记包含名称或id属性,以防万一它们都不可用,您可以继续
driver.switchTo().frame(index)
或
driver.switchTo().frame(iframe_element)
在这里, iframe_element 是一个网络元素。
希望这会有所帮助。
答案 1 :(得分:0)
要发送字符序列,因为所需元素是Angular元素,因此您需要诱使 WebDriverWait 使元素可点击< / em>,则可以使用以下任一解决方案:
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");