Selenium没有识别新开窗口--Selenium C#

时间:2016-05-11 05:51:37

标签: c# selenium selenium-webdriver

好像我在我的代码中遇到了一些同步问题。 在我的过程中,我点击一个按钮打开一个新窗口。 我通过以下代码切换到新窗口。



_webdriver.SwitchTo().Window(_webdriver.WindowHandles.Last();



 然后,我将数据插入下一个窗口中的字段。 问题是有时候"下一个窗口中的对象"没有找到。 我得到了:"无法找到元素"错误。 对我来说,这似乎是一个同步问题,意思是DOM问题。 所以我尝试过使用:



_webdriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); 




我甚至尝试过:



Thread.Sleep(3000);




不幸的是,似乎大多数时候问题是selenium没有切换到新窗口(在调试时可以看到它)。

我很乐意得到您的帮助。

2 个答案:

答案 0 :(得分:0)

我不确定这是如何在C#中完成的,但我认为selenium是相同的,你只需要使用C#语法进行循环。

if (window.cordova && window.SQLitePlugin) {
      var db = $cordovaSQLite.openDB({ name: "my.db", location: 1 }); //device
    }else{
      var db = window.openDatabase("my.db", '1', 'my', 5 * 1024 * 1024); // browser


}

var siret1=data["siret"]
    console.log(siret1);

    var query1 = "UPDATE User SET siret = \'siret1\' " ;
    $cordovaSQLite.execute(db, query1).then(function(res) {
            console.log("ok update");

        }, function (err) {
            console.error(err);
            console.log("not ok update");
        });

这就是我在Java中的表现。你会在C#中得到 //Switch to newly opened window (JAVA) for(String winHandle : driver.getWindowHandles()){ driver.switchTo().window(winHandle); } 相同的方法,如果我没有错,因为这是selenium方法。 希望这对你有所帮助。

答案 1 :(得分:0)

您可以等待两个窗口,然后将上下文设置为新窗口:

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));

// wait for 2 windows
ReadOnlyCollection<String> handles = null;
wait.Until((d) => (handles = driver.WindowHandles).Count > 1);

// set the context on the new window
driver.SwitchTo().Window(handles[handles.IndexOf(driver.CurrentWindowHandle) ^ 1]);