Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java WebDriver-无法定位元素,正在提取网页输入字段_Java_Selenium_Junit_Webdriver - Fatal编程技术网

Java WebDriver-无法定位元素,正在提取网页输入字段

Java WebDriver-无法定位元素,正在提取网页输入字段,java,selenium,junit,webdriver,Java,Selenium,Junit,Webdriver,我试图从网页中提取所有输入字段及其标题和元素详细信息,并将它们放在HashMap中,以供以后在JUnit测试中使用,如 这是来自测试类的示例代码: accountDetails.chooseField("Date of Birth"); accountDetails.changeValueTo(dateOfBirth); public class AccountDetails { WebDriver driver; WebElement accountDetailsTable

我试图从网页中提取所有输入字段及其标题和元素详细信息,并将它们放在HashMap中,以供以后在JUnit测试中使用,如

这是来自测试类的示例代码:

accountDetails.chooseField("Date of Birth");
accountDetails.changeValueTo(dateOfBirth);
public class AccountDetails {

    WebDriver driver;
    WebElement accountDetailsTable;
    WebElement radioButton;

    HashMap<String, WebElement> fields = new HashMap<String, WebElement>();
    WebElement addCustomerButton;

    public AccountDetails(WebDriver driver) {
        this.driver = driver;
        driver.switchTo().defaultContent();
        driver.switchTo().frame(driver.findElement(By.name("officePane")));
        driver.switchTo().frame(driver.findElement(By.name("MainArea")));
        accountDetailsTable = driver.findElement(By.tagName("tbody"));
        addCustomerButton = accountDetailsTable.findElements(By.className("btn_def")).get(0);

        List<WebElement> tr = accountDetailsTable.findElements(By.tagName("tr"));

        for (WebElement el : tr) {
            List<WebElement> td = el.findElements(By.tagName("td"));
            if (td.size() > 0) {
                fields.put(td.get(1).getText(), td.get(0).findElement(By.tagName("input")));
            }
        }
    }
这是页面源代码的一部分。我正在尝试获取标记名为“input”的所有字段。不幸的是,在运行测试时,我遇到以下错误:

org.openqa.selenium.NoSuchElementException:无法定位元素: **{“方法”:“标记名”,“选择器”:“输入”}


工作人员
这是提取类:

accountDetails.chooseField("Date of Birth");
accountDetails.changeValueTo(dateOfBirth);
public class AccountDetails {

    WebDriver driver;
    WebElement accountDetailsTable;
    WebElement radioButton;

    HashMap<String, WebElement> fields = new HashMap<String, WebElement>();
    WebElement addCustomerButton;

    public AccountDetails(WebDriver driver) {
        this.driver = driver;
        driver.switchTo().defaultContent();
        driver.switchTo().frame(driver.findElement(By.name("officePane")));
        driver.switchTo().frame(driver.findElement(By.name("MainArea")));
        accountDetailsTable = driver.findElement(By.tagName("tbody"));
        addCustomerButton = accountDetailsTable.findElements(By.className("btn_def")).get(0);

        List<WebElement> tr = accountDetailsTable.findElements(By.tagName("tr"));

        for (WebElement el : tr) {
            List<WebElement> td = el.findElements(By.tagName("td"));
            if (td.size() > 0) {
                fields.put(td.get(1).getText(), td.get(0).findElement(By.tagName("input")));
            }
        }
    }
公共类帐户详细信息{
网络驱动程序;
WebElement账户稳定;
WebElement单选按钮;
HashMap字段=新的HashMap();
WebElement addCustomerButton;
公共帐户详细信息(WebDriver){
this.driver=driver;
driver.switchTo().defaultContent();
driver.switchTo().frame(driver.findElement(By.name(“officePane”));
driver.switchTo().frame(driver.findElement(By.name(“MainArea”));
accountDetailsTable=driver.findElement(按.tagName(“tbody”);
addCustomerButton=accountDetailsTable.findElements(By.className(“btn_def”)).get(0);
List tr=accountDetailsTable.findElements(按.tagName(“tr”));
for(WebElement el:tr){
列表td=el.findElements(按.tagName(“td”));
如果(td.size()>0){
fields.put(td.get(1.getText()、td.get(0.findElement)(按.tagName(“输入”));
}
}
}

我看到您在上一个tr中有两个td。
td.get(1)。findelelement(按标记名(“输入”)
将给出正确的结果。

要捕获所有输入,我通常这样做:

List<WebElement> inputList = driver.findElements(By.xpath("//input"));
List-inputList=driver.findElements(By.xpath(“//input”);
在你这样使用之后(愚蠢的例子:D):

void showInputValue(列表c){
for(WebElement e:c){
Systeme.println(e.getAttribute(“值”));
}
}

很奇怪,webelements存储会导致staleelementexceptions..难道你不需要再次查找该元素吗。。