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
在上面的代码的帮助下,我试图以webelement
名称发送一些数据作为LogIn。
在这里,我尝试在登录ID字段中发送一些值,但是当我点击登录按钮时,会打开一个弹出窗口。当我右键单击弹出窗口时,我得到一个选项,说明这个框架,然后我才知道它是一个框架。我尝试使用driver.switchTo().frame(wb);
切换到它,其中wb具有帧的路径。当我运行代码时,NOSuchElement exception
获得了loginid fails
,这意味着webdriver
无法将控件传递给框架。
我该如何解决这个问题?
答案 0 :(得分:4)
您错过了更换iframe
GB_frame
,textbox: username
您父iframe
内GB_frame1
的位置{ - 1}}: - switchTo()
请将以下内容添加到您现有的frame
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id='GB_frame1']")));
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id='GB_frame']")));
代码中,如下所示:
switchTo
不需要id
个窗口,因为它只有一个窗口。您也可以使用xpath
代替iframes
来查找{{1}}
答案 1 :(得分:1)
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);
答案 2 :(得分:0)
尝试以下代码,它会正常工作..
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");