tutorial guru eclipse selenium-webdriver testng

eclipse - guru - Webdriver puede iniciar sesión en Chrome, no en Firefox: error ''No se puede encontrar el documento propietario''



testng download (2)

Tengo 2 clases que pertenecen al mismo paquete en un proyecto java testNG y he declarado ''controlador de disco web'' estático público en la clase A. En esa clase, se lanzó Chrome, se abrió url, se ingresaron nombre de usuario y contraseña y se hizo clic en el botón de inicio de sesión. Funcionó bien usando la anotación @BeforeClass.

Copié el mismo código en una clase B y cambié la instancia del navegador a Firefox mientras declaraba que el controlador de webdriver era estático. Se lanzó Firefox, se abrió la URL, se ingresaron el nombre de usuario y la contraseña, pero el botón de inicio de sesión no hizo clic ni se envió. La prueba falló con el error:

org.openqa.selenium.JaScriptException: Error: no se puede encontrar el documento propietario.

Nunca me he encontrado con este error y no tengo idea de a qué se hace referencia al "documento propietario". Sospecho que tiene algo que ver con el nivel de acceso para una o ambas clases. A continuación se muestra un extracto de las 2 clases. ¿Me estoy perdiendo de algo?

*

package com.example; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class TheChrome { public static WebDriver driver; @BeforeClass(alwaysRun = true) public void launchBrowser() { driver = new ChromeDriver(); driver.get("http://www.example.com"); driver.manage().window().maximize(); @Test public void verifyLogin() throws InterruptedException { driver.findElement(By.id("username")).sendKeys("user"); driver.findElement(By.id("password")).sendKeys("password"); Thread.sleep(3000); driver.findElement(By.id("loginButton")).click();

*

package com.example; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class TheFirefox { public static WebDriver driver; @BeforeClass(alwaysRun = true) public void launchBrowser() throws InterruptedException { driver = new FirefoxDriver(); driver.get("http://www.example.com"); driver.manage().window().maximize(); Thread.sleep(3000); } @Test public void verifyLogin() throws InterruptedException { driver.findElement(By.id("username")).sendKeys("user"); driver.findElement(By.id("password")).sendKeys("password"); Thread.sleep(3000); driver.findElement(By.id("loginButton")).click();


Este es un problema causado por la versión de Firefox en uso, 49.0.2. Es un caso extraño y no está claro por qué la versión del navegador está impartiendo la funcionalidad de inicio de sesión, sin embargo, resolver el problema requiere una versión anterior a la versión 46.0. Esto solucionó el problema.


editar: vea esta pregunta y respuesta muy relevante

Si edita la publicación para incluir html relevante, sería más fácil ayudarlo.

Pruebe con cssSelector:

Inspeccione el botón de inicio de sesión. Dentro del inspector, haga clic con el botón derecho en el elemento y copie el Selector de CSS.

driver.findElement(By.cssSelector("copypasta")).click();

Intenta localizar por xpath usando varios métodos diferentes enumerados en esta útil hoja de trucos.

Por ejemplo, si el texto html interno de su botón es ''Iniciar sesión'':

driver.findElement(By.xpath("//button[contains(text(), ''Login'']")).click();

Hay muchas maneras diferentes de hacerlo, por lo que creo que mirar tu html ayudará a la gente a ayudarte.