使用Webdriver 2.40.0(从块包安装)并用C#编写代码
-打开我公司网站的链接,该链接会生成证书错误页面
-单击覆盖链接元素以允许我继续浏览该网站
-单击该页面上的输入按钮,这将生成一个弹出窗口,该窗口的顶部也有一个证书错误页面
我的问题是,当我尝试选择弹出窗口时,抛出“ noSuchWindowException”,代码:
namespace webDriverDemo
{
class Program
{
static void Main(string[] args)
{
string setURL = "xxxxx";
IWebDriver driver = new InternetExplorerDriver(@"C:\Drivers");
driver.Url = setURL;
String loginPage = driver.CurrentWindowHandle;
var securityLine = driver.FindElement(By.Id("overridelink"));
if (!securityLine.Equals(null))
{
securityLine.Click();
}
var enterBtn = driver.FindElement(By.Id("EnterButton"));
enterBtn.Click();
//Select the pop up window
driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()");
driver.SwitchTo().Window("xxxx");
我试过了:
driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()")
和
String riskPage = driver.CurrentWindowHandle;
并切换到该窗口,我也尝试过
driver.SwitchTo().Window();
但是我认为问题是我无法到达证书错误页面的窗口名称,并且无法选择该页面上的和作为元素,并尝试将其另存为单独的句柄。真的需要帮助!
最佳答案
一旦执行了启动弹出窗口的操作enterBtn.Click();
,就需要将上下文切换到新窗口(使用它的窗口句柄,而不是标题),以便能够与之交互。
您可以从driver.WindowHandles
列表中获取弹出窗口的句柄。
var riskPageHandle = driver.WindowHandles.FirstOrDefault(hwnd => hwnd != loginPageWindowHandle);
if(riskPageHandle ==null)
{
//popup not found, log error or handle
}
else
{
//switch to the popup
driver.SwitchTo().Window(riskPageHandle);
Console.WriteLine("Popup window title is : " + driver.Title);
//now accept the certificate error (your code, I haven't tried it)
driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()");
}