Java & Selenium网页搜罗字段输入文本不起作用

1aaf6o9v  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(113)

我的代码:

driver.manage().window().maximize();
    
    Duration pageLoadTimeout = Duration.ofMinutes(1);
    driver.manage().timeouts().pageLoadTimeout(pageLoadTimeout);
    
    driver.get("https://deutsche-giganetz.de/");
    WebDriverWait wait = new WebDriverWait(driver, pageLoadTimeout);
    
    wait.until(webDriver -> ((JavascriptExecutor) webDriver)
                    .executeScript("return document.readyState")
                    .equals("complete"));
    
    driver.findElement(By.xpath("/html/body/section/div/div[1]/div[2]/div[1]/button[1]")).click();
    Thread.sleep(5000);
    
    driver.findElement(By.xpath("/html/body/header/div/div/nav/div/div[1]/div[2]/ul/li[1]/a")).click();
    Thread.sleep(5000);
    
    
    assert driver.getWindowHandles().size() == 1;
    
        WebElement jetztBestellenButton = driver.findElement(By.xpath("/html/body/main/div[8]/div/section/div/div[1]/div[2]/div[3]/div[1]/div/div[5]/a"));
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("arguments[0].click();", jetztBestellenButton);
        Thread.sleep(5000);
        
        
        driver.findElement(By.name("deliveryAddress.zip")).sendKeys("20095");

在页面上找不到元素。一旦脚本点击链接并被重定向到新页面,它应该在字段中输入一些内容,但这不起作用。我已经尝试了所有方法。
我尝试了路径findElement by.的一切,与id,类,XPath和它没有一个工作.我从geckodriver切换到chromedriver以为这是浏览器,但它也不是.我还写了一个代码,加载页面,使路径可以找到,但它也没有工作.
每次的错误代码都是找不到该项,例如:"no such element: Unable to locate element: {"method":"css selector","selector":"*[name='deliveryAddress.zip']"}"

tv6aics1

tv6aics11#

**失败的根本原因:**单击时,窗口将在新选项卡中打开。您正尝试在父选项卡中执行.sendKeys。因此出现异常unable to locate element
**解决方案:**您需要切换到新选项卡,然后执行.sendKeys操作使用以下代码切换到新选项卡/窗口

String tab =driver.getWindowHandle(); // Store your parent tab
        String newTab = null;
        Set<String> handles = driver.getWindowHandles(); // get all tab handles
                    Iterator<String> iterator = handles.iterator();
                    while (iterator.hasNext()){
                        newTab = iterator.next();
                    }
        driver.switchTo().window(newTab); // switch to new tab

**完整的工作代码:**使用下面的代码,它在我的计算机中按预期工作

String tab =driver.getWindowHandle(); // Store your parent tab
        String newTab = null;
        WebElement jetztBestellenButton = driver.findElement(
                By.xpath("/html/body/main/div[8]/div/section/div/div[1]/div[2]/div[3]/div[1]/div/div[5]/a"));
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("arguments[0].click();", jetztBestellenButton);
        Thread.sleep(3000);
        
        Set<String> handles = driver.getWindowHandles(); // get all tab handles
                    Iterator<String> iterator = handles.iterator();
                    while (iterator.hasNext()){
                        newTab = iterator.next();
                    }
        driver.switchTo().window(newTab); // switch to new tab
        js.executeScript("arguments[0].value='20095';", driver.findElement(By.name("deliveryAddress.zip")));

**注意:**如果您想切换到父选项卡,则只需使用以下代码

driver.switchTo().window(tab);

结果输出:

**UPDATE:**在末尾添加以下代码行,这将启用prüfen按钮

js.executeScript("arguments[0].value='20095';", driver.findElement(By.name("deliveryAddress.zip")));

在上面的行之后,添加下面的3行

Thread.sleep(2000);
driver.findElement(By.name("deliveryAddress.zip")).clear();
driver.findElement(By.name("deliveryAddress.zip")).sendKeys("20095");

相关问题