Utheen Ответов: 1

Как переключаться между iframes в selenium webdriver


Привет,
Я новичок в selenium и пытаюсь научиться работе с iframe. Работая с демо-сайтом, я столкнулся с проблемой переключения кадров.
сайт: Только тестирование: iframe1[^] .
Показ ошибки выглядит следующим образом:
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"name","selector":"fname"}



Я хотел бы знать различные способы переключения между кадрами, пожалуйста, помогите мне.

Что я уже пробовал:

ublic class DragAndDrop {
		WebDriver driver;
		@Test
		public void function() throws InterruptedException{
			//System.setProperty("webdriver.gecko.driver", "./lib/geckodriver.exe");
			String driverPath = "F:\\EclipseWorkspace\\lib_Treesa\\";
	        System.setProperty("webdriver.chrome.driver", driverPath + "chromedriver.exe");
	        ChromeOptions options = new ChromeOptions();
	        		options.addArguments("--start-maximized");

	        driver = new ChromeDriver(options);
	        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

			driver.navigate().to("http://only-testing-blog.blogspot.in/2015/01/iframe1.html");
			int size = driver.findElements(By.tagName("iframe")).size();//<<Calculates the number of inline frames in webpage>
			System.out.println("total frames"+size);

driver.switchTo().frame("frame1");
			
			driver.findElement(By.xpath(".//*[@id='post-body-3107268830657760720']/div[1]/table/tbody/tr[1]/td[1]/input")).click();
			driver.findElement(By.xpath(".//*[@id='post-body-3107268830657760720']/div[1]/table/tbody/tr[2]/td[2]/input")).click();
			driver.findElement(By.xpath(".//*[@id='post-body-3107268830657760720']/div[1]/table/tbody/tr[3]/td[1]/input")).click();
			driver.findElement(By.xpath(".//*[@id='post-body-3107268830657760720']/div[1]/table/tbody/tr[4]/td[2]/input")).click();
			driver.findElement(By.xpath(".//*[@id='post-body-3107268830657760720']/div[1]/table/tbody/tr[5]/td[1]/input")).click();

driver.switchTo().frame("frame2");

driver.findElement(By.name("fname")).sendKeys("RAM");
			System.out.println("2222222222222222222");
			//Thread.sleep(100);
			driver.findElement(By.id("text3")).sendKeys("GOPAL");
			//Thread.sleep(100);
			driver.findElement(By.id("check3")).click();
			//Thread.sleep(300);
			driver.findElement(By.id("radio2")).click();
			driver.findElement(By.xpath(".//*[@id='post-body-4292417847084983089']/div[1]/form[1]/input[10]")).click();
			WebElement fileInput = driver.findElement(By.name("uploadfile"));
			fileInput.sendKeys("C:/path/to/file.jpg");

1 Ответов

Рейтинг:
12

mrased

Привет,

Хотя я пробовал свой be, но не смог найти правильного решения этой проблемы, используя явную функцию ожидания .
Означают хитрый я предлагаю вам решение, используя нить.спать на приведенном выше фрагменте .

Выпуск 1: В вашем коде нет места, где было указано переключиться с фрейма1, так как фрейм2 не является частью фрейма1.

Разрешение: я использовал

driver.switchTo().defaultContent();
для переключения на стандартный или основной документ, в котором находится веб-содержимое.

Выпуск 2: После перехода на главную веб-страницу код не дал достаточно времени, чтобы идентифицировать и найти фрейм2.

Разрешение: я использовал
Thread.sleep(3000);
где 3000 указывает на размерность времени (миллисекунды)

И теперь ваш код работает нормально.

Я загрузил изображение по следующей ссылке:
[^]



Код следующим образом:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;

public class codeproject {

	WebDriver driver;
	@Test
	public void function() throws InterruptedException{
		//System.setProperty("webdriver.gecko.driver", "./lib/geckodriver.exe");
		System.setProperty("webdriver.chrome.driver","D:\\training\\DB_Study_selenium\\class7 _ webdrider\\chromedriver.exe");

		   ChromeDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
		driver.navigate().to("http://only-testing-blog.blogspot.in/2015/01/iframe1.html");
		int size = driver.findElements(By.tagName("iframe")).size();//<<Calculates the number of inline frames in webpage>
		System.out.println("total frames"+size);
		
		
		driver.switchTo().frame("frame1");
		
		driver.findElement(By.xpath(".//*[@id='post-body-3107268830657760720']/div[1]/table/tbody/tr[1]/td[1]/input")).click();
		driver.findElement(By.xpath(".//*[@id='post-body-3107268830657760720']/div[1]/table/tbody/tr[2]/td[2]/input")).click();
		driver.findElement(By.xpath(".//*[@id='post-body-3107268830657760720']/div[1]/table/tbody/tr[3]/td[1]/input")).click();
		driver.findElement(By.xpath(".//*[@id='post-body-3107268830657760720']/div[1]/table/tbody/tr[4]/td[2]/input")).click();
		driver.findElement(By.xpath(".//*[@id='post-body-3107268830657760720']/div[1]/table/tbody/tr[5]/td[1]/input")).click();

		driver.switchTo().defaultContent();
		System.out.println("default content");
		// WebDriverWait wait = new WebDriverWait(driver,30);
		 //wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frame2"));

	Thread.sleep(5000);
		 System.out.println("Initiate for frame 2");
		driver.switchTo().frame("frame2");
		System.out.println("switch to frame2");
		driver.findElement(By.name("fname")).sendKeys("RAM");
		System.out.println("2222222222222222222");
		//Thread.sleep(100);
		driver.findElement(By.id("text3")).sendKeys("GOPAL");
		//Thread.sleep(100);
		driver.findElement(By.id("check3")).click();
		//Thread.sleep(300);
		driver.findElement(By.id("radio2")).click();
		driver.findElement(By.xpath(".//*[@id='post-body-4292417847084983089']/div[1]/form[1]/input[10]")).click();
		WebElement fileInput = driver.findElement(By.name("img"));
		fileInput.sendKeys("C:/path/to/file.jpg");	
	}
}