我点击子窗口中的按钮时收到“org.openqa.selenium.NoSuchElementException:no such element”

时间:2015-02-10 13:33:41

标签: java selenium selenium-webdriver selenium-chromedriver

控制台中的错误消息如下所示。

尝试单击子窗口中的按钮时出现以下错误。

  

org.openqa.selenium.NoSuchElementException:没有这样的元素         (会话信息:chrome = 40.0.2214.111)         (驾驶信息:chromedriver = 2.9.248315,         platform = Windows NT 6.1 SP1 x86_64)(警告:服务器未提供任何堆栈跟踪信息)       命令持续时间或超时:30.05秒       有关此错误的文档,        请访问:http://seleniumhq.org/exceptions/no_such_element.html       构建信息:版本:'2.44.0',        修订版:'76d78cf',        时间:'2014-10-23 20:03:00'       系统信息:主持人:'AS-Ramesh',        ip:'*******',        os.name:'Windows 7',        os.arch:'x86',        os.version:'6.1',        java.version:'1.7.0_17'       会话ID:0e85209c610382395e8dee65a9766bd2       驱动程序信息:org.openqa.selenium.chrome.ChromeDriver       能力[{platform = XP,        acceptSslCerts = TRUE,        javascriptEnabled = TRUE,        browserName =铬,        铬= {userDataDir = C:\用户\ rameshp \应用程序数据\本地\ TEMP \ scoped_dir27484_24934},        旋转=假,        locationContextEnabled = TRUE,        版本= 40.0.2214.111,        takesHeapSnapshot = TRUE,        cssSelectorsEnabled = TRUE,        databaseEnabled =假,        handlesAlerts = TRUE,        browserConnectionEnabled =假,        webStorageEnabled = TRUE,        nativeEvents = TRUE,        applicationCacheEnabled =假,        takesScreenshot =真}]           at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)           at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)           at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)           at java.lang.reflect.Constructor.newInstance(Unknown Source)           在org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)           在org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)           在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)           在org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:352)           在org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:449)           在org.openqa.selenium.By $ ByXPath.findElement(By.java:357)           在org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344)           在FEPModule.FEPLogin.Login_Main(FEPLogin.java:176)           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)           at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)           at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)           at java.lang.reflect.Method.invoke(Unknown Source)           at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)           在org.testng.internal.Invoker.invokeMethod(Invoker.java:714)           在org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)           at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)           at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)           at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)           在org.testng.TestRunner.privateRun(TestRunner.java:767)           在org.testng.TestRunner.run(TestRunner.java:617)           在org.testng.SuiteRunner.runTest(SuiteRunner.java:334)           在org.testng.SuiteRunner.run顺序(SuiteRunner.java:329)           在org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)           在org.testng.SuiteRunner.run(SuiteRunner.java:240)           在org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)           在org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)           at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)           在org.testng.TestNG.runSuitesLocally(TestNG.java:1149)           在org.testng.TestNG.run(TestNG.java:1057)           at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)           在org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)           在org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)

代码如下

public class FELogin {
private WebDriver driver;
private String url, myuserName, myPassword, LoginUsernamelink, LoginPasswordlink, LoginOklink, OpenFEModulelink;    

@BeforeTest
  public void setUp() throws Exception {        
    //get values from OR.Properties file
     FileInputStream conf=new FileInputStream("C:\\eclipse new selenium\\Proj\\Config\\OR.Properties");
     Properties p=new Properties();
     p.load(conf);   
     Thread.sleep(1000);
     url=p.getProperty("testSiteName");
     Thread.sleep(1000);         
     myuserName=p.getProperty("myusername_link");
     myPassword=p.getProperty("mypassword_link");
     LoginUsernamelink=p.getProperty("LoginUsername_link");
     LoginPasswordlink=p.getProperty("LoginPassword_link");
     LoginOklink=p.getProperty("LoginOk_link");
     OpenFEModulelink=p.getProperty("OpenFEModule_link");

     //Chrome Driver Configuration
     System.setProperty("webdriver.chrome.driver", "C:\\Selenium JARs\\chromedriver.exe");
     ChromeOptions options = new ChromeOptions();
     options.addArguments("--disable-extensions");
     driver = new ChromeDriver(options);         
      driver.get(url);
      driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

      //maximize chrome window
      driver.manage().window().maximize();
      Thread.sleep(1000);        
  }
@Test
public void Login_Main() throws InterruptedException {   

  //Enter username
  driver.findElement(ById.xpath(LoginUsernamelink)).clear();
  driver.findElement(ById.xpath(LoginUsernamelink)).sendKeys("user");
  Thread.sleep(1000);
  //Enter password
  driver.findElement(ById.xpath(LoginPasswordlink)).clear();
  driver.findElement(ById.xpath(LoginPasswordlink)).sendKeys("New@123");
  Thread.sleep(1000);
  //login to website
  driver.findElement(ById.xpath(LoginOklink)).click();
  Thread.sleep(6000); 
  driver.switchTo().frame(0);
  Thread.sleep(1000);

  driver.findElement(ById.cssSelector(OpenFEModulelink)).click();
  Thread.sleep(3000);     

  String ParentWindow = driver.getWindowHandle();
  Thread.sleep(200);
    for(String childHandle: driver.getWindowHandles()){
        Thread.sleep(100);
        driver.switchTo().window(childHandle);
    Thread.sleep(100);              
    }

//the below code for login to child window

  Thread.sleep(1000);
  //enter user name
  driver.findElement(By.id("username")).sendKeys("user");
  Thread.sleep(1000);
  //enter password
  driver.findElement(By.id("password")).sendKeys("New@123");
  Thread.sleep(1000);
  //login to website
  driver.findElement(By.name("submit")).click();
  Thread.sleep(3000);    
  driver.manage().window().maximize();
  Thread.sleep(5000);        

//------upto here working fine-------------

  //click on search button in child window 

  //----The below code is not working for me---getting exception(no such element)
  driver.findElement(ById.xpath(".//*[@id='zT7Tg3']")).click();
  Thread.sleep(1000);

}

1 个答案:

答案 0 :(得分:0)

HTML源可能有助于我更好地分析。但是,您也可以在切换到特定帧或窗口后使用getpagesource()函数调试代码,以检查它是否正确切换到页面并查看该元素是否在您要切换到的页面中可用。

相关问题