Javascript Can';t使用Selenium Webdriver访问Angularjs表单输入中预先填充的数据

Javascript Can';t使用Selenium Webdriver访问Angularjs表单输入中预先填充的数据,javascript,angularjs,selenium,Javascript,Angularjs,Selenium,以下是html: <form class="ng-scope ng-pristine ng-valid ng-valid-required" ng-hide="loading" name="profileForm" ng-submit="saveStudent()" novalidate="" style=""> <div ng-hide="profileSaved"> <label>First Name</label> <

以下是html:

<form class="ng-scope ng-pristine ng-valid ng-valid-required" ng-hide="loading" name="profileForm" ng-submit="saveStudent()" novalidate="" style="">
  <div ng-hide="profileSaved">
    <label>First Name</label>
    <input class="ng-pristine ng-valid ng-valid-required" type="text" required="" ng- model="data.Student.FirstName" name="FirstName">
我试着使用:

String str = ((JavascriptExecutor)driver).executeScript("document.getElementsByName('FirstName').value;").toString();
没有返回任何内容,这是我所期望的,因为输入没有value属性。我在清除输入字段或使用sendKeys()更改数据时也遇到问题。我可以移动到输入并单击使用:

inputs.moveToElement(fname).click(fname).perform();
关于如何访问预填充表单的值,有什么想法吗

我还注意到与输入字段的交互还有一些奇怪的地方。如果我这样做:

inputs.moveToElement(fname1).click(fname1).sendKeys(fname1, "test").perform();
String str2 = fname1.getAttribute("value");
System.out.println("text2 is: "+str2);
str2的值为“测试”,但输入字段中仅显示默认值。如果我这样做:

fname1.clear();
inputs.moveToElement(fname1).click(fname1).sendKeys(fname1, "test").perform();
String str2 = fname1.getAttribute("value");
System.out.println("text2 is: "+str2);

str2仍然是“test”,但页面在输入字段中显示默认值+test(例如“FirstNametest”)

您使用的是量角器吗?我使用的是量角器和selenium。我支持两种不同的技术栈,在验证默认表单数据时遇到了相同的问题。我能够在一个堆栈中使用量角器,因为它是一个纯角度应用程序。第二个应用程序需要从非angular应用程序登录,因此我使用selenium webdriver和java。在使用WebDriverWait wait.until(d=>d.FindElement(By.Id(“elementId”))时,我遇到了一些问题;这可能是一种竞争条件,其中表单数据在查询时不可用(在angular before Digrator中我经常遇到这种情况。这只是一个建议,我尝试过:
WebElement fname1=(new WebDriverWait(driver,10))。直到(ExpectedConditions.PresenceOfementLocated(By.xpath(“/html/body/div[3]/form/div/input[1]”));
但仍然有同样的问题。
fname1.clear();
inputs.moveToElement(fname1).click(fname1).sendKeys(fname1, "test").perform();
String str2 = fname1.getAttribute("value");
System.out.println("text2 is: "+str2);