Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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 无法访问新弹出窗口中框架内的webelement_Java_Selenium_Xpath_Selenium Webdriver_Frame - Fatal编程技术网

Java 无法访问新弹出窗口中框架内的webelement

Java 无法访问新弹出窗口中框架内的webelement,java,selenium,xpath,selenium-webdriver,frame,Java,Selenium,Xpath,Selenium Webdriver,Frame,通过以上代码的帮助,我试图在webelement名称中发送一些数据作为登录名。 在这里,我试图在登录id字段中发送一些值,但当我单击登录按钮时,弹出窗口打开。当我右键点击弹出窗口时,我得到一个选项,上面写着这个框架,然后我知道它是一个框架。我尝试使用driver.switchTo().frame(wb)切换到它其中wb具有帧的路径。当我运行代码时,我得到了loginid失败的noTouchElement异常,这意味着webdriver无法将控件传递到帧 如何解决这个问题?您错过了切换到另一个if

通过以上代码的帮助,我试图在
webelement
名称中发送一些数据作为登录名。 在这里,我试图在登录id字段中发送一些值,但当我单击登录按钮时,弹出窗口打开。当我右键点击弹出窗口时,我得到一个选项,上面写着这个框架,然后我知道它是一个框架。我尝试使用
driver.switchTo().frame(wb)切换到它其中wb具有帧的路径。当我运行代码时,我得到了
loginid失败的
noTouchElement异常
,这意味着
webdriver
无法将控件传递到帧


如何解决这个问题?

您错过了切换到另一个
iframe
的机会,即
GB\u-frame
,其中您的
文本框:username
存在于该父级
iframe
:-
GB\u-frame1

请将以下内容添加到现有的
switchTo()
frame
代码中,如下所示:

    import java.util.concurrent.TimeUnit;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;

    public class Iframe {

    public static void main(String[] args) throws Exception{
    WebDriver driver=new FirefoxDriver();
    WebElement wb;
    try{
    driver.get("http://www.timesjobs.com/");
    driver.manage().window().maximize();
    System.out.println("Old window "+driver.getTitle());
    String old=driver.getWindowHandle();
    driver.findElement(By.xpath("//li[1][@class='bdr-left']/a")).click();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    for(String newi:driver.getWindowHandles()){
        driver.switchTo().window(newi);}
    System.out.println("New window "+driver.getTitle());
    wb=driver.findElement(By.xpath(".//*[@id='GB_window']/div[2]/iframe"));
    driver.switchTo().frame(wb);
    wb=driver.findElement(By.xpath(".//*[@id='j_username']"));
    wb.click();
    wb.sendKeys("shantanunandan@gmail.com");
    driver.switchTo().defaultContent();
    driver.switchTo().window(old);
    System.out.println("Old window "+driver.getTitle());     
    }//try
    catch(Exception e){
        e.printStackTrace();
        driver.close();
        //driver.quit();
    }//catch
    finally{
        driver.close();
        //driver.quit();
    }//finally
   }//main
 }//class

没有必要切换到窗口,因为它只有一个窗口。您还可以使用
id
而不是
xpath
来定位
iframe

尝试下面的代码,它会很好地工作

driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id='GB_frame1']")));
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id='GB_frame']")));
 Maybe there are two frames a frame inside a frame. Check the html document and if you finds so then change the code as necessary

 WebElement webele=driver.findElement(By.xpath("//iframe[@id='GB_frame1']"));
 driver.switchTo().frame(webele);
 webele=driver.findElement(By.xpath("//iframe[@id='GB_frame']"));
 driver.switchTo().frame(weble);

你能用firebug识别这个框架吗?@Imen是的,我能用firebug识别这个框架,但不在同一个窗口中。问题是,一旦我点击登录按钮,弹出窗口就会打开,框架就在弹出窗口内。我可以使用FireBug识别弹出窗口中的帧您是否尝试像driver.switchTo().frame((driver.findelelement)(By.cssSelector(“iframe[id='appli']))那样切换到您的帧);或者通过.xpath(…)。在“/”之前的xpath中有“.”,请尝试删除它并再次执行脚本。NoScouchelment意味着xpath标识中有错误,先生。过去两天我一直在寻找解决方案,但没有找到任何结果。就因为你,代码开始工作了。再次谢谢你,先生。我是硒的初学者,这就是为什么我想问你,你是怎么知道在一个框架里有一个框架的。你能和我分享一下吗?即使一开始我也不想,因为我们切换到()的方式没有问题。如果它不能
findElement
,你需要检查它是否在多个框架下,不仅仅是检查,如果你漏掉了什么,还要检查html。先生,我检查了html,但没有进入iframe标记内编写的代码。从现在起,我将检查alsoTo是否出自使用driver.switchTo().defaultContent()所需的框架;编码一两次?一次就够了。
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("GB_frame1")));
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("GB_frame")));
driver.findElement(By.id("j_username")).sendKeys("TEST");