当前位置: 首页 > 知识库问答 >
问题:

线程“main”org.openqa.selenium.ElementNotVisibleException中的异常:元素当前不可见,因此可能无法与之交互

索嘉石
2023-03-14
*Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with*

Following is my entire code: 


package NewCsvPkg;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

//csv reader imports
import java.io.FileReader;
import java.util.Iterator;
import java.util.List;
//import au.com.bytecode.opencsv.CSVReader;
import com.opencsv.CSVReader;
public class NewCsvClass {

  public static void main(String[] args) throws Exception  {

      WebDriver driver = new FirefoxDriver();    
         String appUrl = "https://accounts.google.com";
         driver.get(appUrl);
         driver.manage().window().maximize(); 


     //csv reader aswathy -start
     CSVReader reader = new CSVReader(new FileReader("/home/user/Documents/UrmilaDocs/CSV PAck/testCSV.csv"));
        String [] nextLine;

        while ((nextLine = reader.readNext())!= null){


        String user_name = nextLine[0];
        String pass_word = nextLine[1];


            System.out.println("Username: " + user_name);
            System.out.println("Password: " + pass_word);

            //start


            WebElement username = driver.findElement(By.xpath(".//*[@id='Email']"));
             username.clear();
            username.sendKeys(user_name);
             driver.findElement(By.xpath(".//*[@id='next']")).click();

             Thread.sleep(5000);
             //try
             try{
            WebElement password = driver.findElement(By.xpath(".//*[@id='Passwd']"));
              password.clear();
              password.sendKeys( pass_word);
              driver.findElement(By.xpath(".//*[@id='signIn']")).click();
        Thread.sleep(8000);
        System.out.println("Login Success");

        //click on 'Google Apps' icon 
        driver.findElement(By.xpath(".//*[@id='gbwa']/div[1]/a")).click();
        Thread.sleep(10000);

        //Click on 'Gmail' icon to navigate to inbox page
        driver.findElement(By.xpath(".//*[@id='gb23']/span[1]")).click();
        Thread.sleep(10000);

        //Click on user name first letter circle icon
        driver.findElement(By.xpath(".//*[@id='gb']/div[1]/div[1]/div[2]/div[4]/div[1]/a/span")).click();
        Thread.sleep(3000);

        //click on 'Signout' button
        driver.findElement(By.xpath(".//*[@id='gb_71']")).click();
        Thread.sleep(5000);
        System.out.println("Logout Success");
             }// try closed

             //catch exception
             catch(Exception e)
             {
                 System.out.println("Login failed!");  
             }// catch closed
//           //closing driver & firefox
             driver.close();
            //end



        }//while end

     //csv reader end
        System.exit(0);       //closing firefox  


  } 
  }

共有1个答案

谭健柏
2023-03-14

您正在while循环内调用driver.close();,该循环将关闭浏览器。关闭浏览器时不能与元素交互。在测试完成后将其移动到。

另请注意,如果您希望在与元素交互之前确保该元素是可见的,请使用explicit wait

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement username = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Email")));
username.sendKeys(user_name);

这将等待长达10秒的元素可见。wait.tear也返回它所等待的元素。

WebDriverWait wait = new WebDriverWait(driver, 10); // initialize wait object

while ((nextLine = reader.readNext())!= null) {

    // locate and write to user name
    WebElement username = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Email")));
    username.clear();
    username.sendKeys(user_name);

    // locate and write to password
    WebElement password = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Passwd")));
    password.clear();
    password.sendKeys(user_name);
}
 类似资料:
  • 问题内容: 我正在尝试在Selenium Web驱动程序脚本下执行,但是几次(并非所有时间)都出现错误。有时在循环中第一次迭代,有时在2次迭代中,有时没有启动循环。它打印所有可用项目的计数正确,但是乳清试图单击项目,显示 问题答案: 终于这对我有用。元素当前不可见,因此可能无法与之交互。 最初,这就像测试只成功了5次中的2次一样。不确定有时如何运作,其他人则无法运作。 通过减少IE中的安全设置来工

  • 我正在尝试在下面执行硒Web驱动程序脚本,但是我正在获得(不是所有时间)。有时在第一次迭代的循环中,有时在2次迭代中,有时没有启动循环。它正确打印所有可用的项目计数,但乳清试图点击项目,它显示

  • 我需要选择列表中的最后一项。下面的代码显示了该元素当前不可见的消息。如何解决这个问题? HTML: 列表的屏幕截图。该列表有一个搜索字段,用户可以在其中输入前缀以缩小搜索范围。

  • 问题内容: 我正在尝试单击具有文本克隆概念的范围。以下是html 我使用的javascript代码是: 我确认这是通过Firepath的元素的正确选择。 我还确保按照链接可见该元素。如何强制SeleniumWebDriver单击当前不可见的元素? 这是 计算的CSS 还尝试了以下代码: 异常: org.openqa.selenium.ElementNotVisibleException:元素当前不

  • 这是我项目中的弹出窗口,我遇到了点击“我准备好返回注册主页”链接的问题。我是按id定位的 它抛出错误“元素当前不可见,因此可能无法与元素交互”][1] [1]:http://i.stack.imgur.com/sbjJb.png

  • 我正在编写脚本,使用selenium将我的ssh密钥添加到bitket的部署密钥中。直到行 工作正常,但当弹出窗口出现时,我想在特定字段中输入键 它抛出此错误 元素当前不可见,因此可能无法与之交互。我在谷歌上搜索了这个。我开始知道,首先我需要转到此弹出窗口,然后我将能够将值传递给相应的元素。我不知道该怎么做。 请帮助我如何专注于新的弹出窗口。我也使用了时间睡眠(10),但它仍然不适合我。