eclipse Webdriver可以在Chrome中登錄,而不是在Firefox中:“無法找到擁有文檔”錯誤




selenium-webdriver testng (2)

編輯:看到這個非常相關的問題和答案

如果你編輯的文章包括相關的HTML,這將是更容易幫助。

嘗試使用cssSelector:

檢查登錄按鈕。 在檢查器中,右鍵單擊元素並複制CSS選擇器。

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

嘗試通過xpath使用這個有用的備忘單中列出的幾種不同的方法來定位

例如,如果按鈕的內部html文本是“登錄”:

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

有很多不同的方法來做到這一點,所以看著你的HTML將幫助人們幫助你,我想。

我有2個類屬於一個java testNG項目中的同一個包,我已經在類A中聲明了'webdriver driver'public static。在該類中,chrome啟動,url打開,用戶名和密碼被輸入,並單擊登錄按鈕。 使用@BeforeClass註釋工作得很好。

我將相同的代碼複製到類B中,並將瀏覽器實例更改為Firefox,同時仍將“webdriver驅動程序”聲明為公共靜態。 Firefox已啟動,URL已打開,用戶名和密碼已輸入,但登錄按鈕未點擊或提交。 測試失敗的錯誤:

org.openqa.selenium.JavascriptException:錯誤:無法找到擁有文檔。

我從來沒有遇到過這個錯誤,也不知道正在引用什麼“擁有文件”。我懷疑它與任何一個或兩個類的訪問級別有關。 以下是2個課程的摘錄。 我錯過了什麼嗎?

*

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();

這是由使用的Firefox版本49.0.2引起的問題。 這是一個奇怪的情況,不清楚為什麼登錄功能正在使用的瀏覽器版本,但解決這個問題需要降級到版本46.0。 這解決了這個問題。