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.