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

C#Selenium IE驱动程序打开子窗口,看起来它已完全加载,但实际上是一个空白HTML页面

冯浩旷
2023-03-14

我在自动化测试用例中执行以下步骤:

  • 登录到应用程序。
  • 切换到标题为“主菜单”的框架(示例)
  • 从“主菜单”中选择并单击所需元素

问题:

当IE驱动程序(版本3.14.0.0)单击“主菜单”中的搜索按钮时

我用ChromeDriver完成了上述测试步骤,但测试必须使用IE驱动程序(应用程序要求)执行。

我还尝试设置IE驱动程序的功能,如所述:如何使用Selenium Web驱动程序启动互联网资源管理器驱动程序,但我无法修改任何IE浏览器安全选项,因为这些选项已被禁用。

我注意到当我在驱动程序执行“主菜单”后使用下面的代码时

  foreach (var process in Process.GetProcessesByName("IEDriverServer"))
        {
            process.Kill();

        }

然后子窗口开始完全运行,但是驱动程序会话当然结束了,所以我无论如何都无法继续后面的步骤。

问题:

有没有一种方法可以在执行点击后暂停驱动程序的进程,等待子窗口完全加载,然后恢复进程以便它可以切换到子窗口等等?如果没有,有没有办法把这个窗口附加到当前的浏览器会话中?

共有1个答案

晋承运
2023-03-14

我建议您查看显式等待。

对于命令式程序语言,Selenium客户端可以使用显式等待。它们允许您的代码停止程序执行或冻结线程,直到您传递的条件解决为止。以特定频率调用条件,直到等待超时。这意味着,只要条件返回错误值,它就会继续尝试和等待。

有了它的帮助,你可以尝试暂停代码,直到该窗口上的任何特定控件变得可见。

示例C#示例:

 WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(4));

            // Test the autocomplete response - Explicit Wait
            IWebElement autocomplete = wait.Until(x => x.FindElement(By.ClassName("ac-row-110457")));

另一个例子:

// The timespan determines how long to wait for any 'condition' to return a value
// If it is exceeded an exception is thrown.
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5.0));

// Set the 'condition' as an anonymous function returning a boolean
wait.Until<Boolean>(delegate(IWebDriver d)
{
    // Check if our global variable is initialized by running a little JS
    return (Boolean)((IJavaScriptExecutor)d).ExecuteScript("return typeof(window.TestReady) !== 'undefined' && window.TestReady === true");
});

引用:

(1)如何检查页面是否完全加载在Web驱动程序中?

(2) 明确等待

(3)Selenium Webdrive-等待元素加载

 类似资料:
  • 当我运行此代码时,它会显示一个空白的黑色窗口,并显示未定义。 这不是颜色,它没有画任何线强硬我给的命令 我的错误是什么,阻止我将屏幕变白并引发错误?

  • 问题内容: 页面上的一个块由JavaScript填充内容,并且在用Jsoup加载页面后,没有任何信息。解析网页时,是否还有办法获取JavaScript生成的内容? 由于代码太长,因此无法在此处粘贴页面代码:http : //pastebin.com/qw4Rfqgw 这是我需要的内容元素: 我需要用Java获取此信息。最好使用Jsoup。元素是在JavaScript帮助下的字段: Java代码:

  • 问题内容: 我正在尝试在C#中将PhantomJS与Selenium Webdriver一起使用。以下是我的代码: 该代码可以正常工作,但是只要运行,它就会打开一个cmd窗口,其中显示了phantomjs的所有日志。该cmd也用关闭。 问题是我不希望显示cmd窗口。我应该怎么做才能做到这一点? 更新:当我在Python中执行相同的代码时,cmd窗口不显示。但是,如果我使用py2exe将python

  • 当在Selenium IE Web Driver中激发时,它将打开一个新窗口,而不是在新选项卡中打开。 通常在IE浏览器中,它会打开一个新的选项卡,但在Selenium Web Driver中不会。 需要修复。

  • 我所做的是 页面导航后,OnNavigated函数触发,正如我所预期的。但在页面导航和填写用户名和密码之后,如果用户手动单击登录按钮,则在登录后将出现新的页面。在这个新的页面被导航的过程中,它不会触发OnNavigated。但是我想获得每个页面被导航的通知,甚至从用户输入。那么如何才能做到这一点呢?