Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在自动化过程中找不到网页上的元素_C#_Selenium - Fatal编程技术网

C# 在自动化过程中找不到网页上的元素

C# 在自动化过程中找不到网页上的元素,c#,selenium,C#,Selenium,我正在使用Selenium web driver 2.44进行自动化某些网页,在自动化运行期间,我的浏览器出现意外错误。请参见以下内容 图片: 因此,当这种情况发生时,我的页面将挂起,框架无法在当前网页中找到任何元素。我试图升级/降级我的IE驱动程序 当我双击此错误标志时,会出现以下弹出的IE窗口: 打开浏览器的保护模式。它位于“选项”的“安全”选项卡中。如果这不起作用,请确保每个区域的打开或关闭选项相同。有四个区域:内部网、受信任的、Internet和受限的 这里有一些代码可以帮你做到这一点,

我正在使用Selenium web driver 2.44进行自动化某些网页,在自动化运行期间,我的浏览器出现意外错误。请参见以下内容 图片:

因此,当这种情况发生时,我的页面将挂起,框架无法在当前网页中找到任何元素。我试图升级/降级我的IE驱动程序

当我双击此错误标志时,会出现以下弹出的IE窗口:


打开浏览器的保护模式。它位于“选项”的“安全”选项卡中。如果这不起作用,请确保每个区域的打开或关闭选项相同。有四个区域:内部网、受信任的、Internet和受限的

这里有一些代码可以帮你做到这一点,即:

// Intranet
private const string REG_KEY_IE_ZONE_1 = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1";
// Trusted
private const string REG_KEY_IE_ZONE_2 = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2";
// Internet
private const string REG_KEY_IE_ZONE_3 = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3";
// Restricted
private const string REG_KEY_IE_ZONE_4 = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4";

public static void SetIESecurityToProtected()
{
    // 3 is off, 0 is on
    try
    {
        // Intranet
        if ((int)Registry.GetValue(REG_KEY_IE_ZONE_1, "2500", -1) == 3)
        {
            Registry.SetValue(REG_KEY_IE_ZONE_1, "2500", 0);
        }

        // Trusted
        if ((int)Registry.GetValue(REG_KEY_IE_ZONE_2, "2500", -1) == 3)
        {
            Registry.SetValue(REG_KEY_IE_ZONE_2, "2500", 0);
        }

        // Internet
        if ((int)Registry.GetValue(REG_KEY_IE_ZONE_3, "2500", -1) == 3)
        {
            Registry.SetValue(REG_KEY_IE_ZONE_3, "2500", 0);
        }

        // Restricted
        if ((int)Registry.GetValue(REG_KEY_IE_ZONE_4, "2500", -1) == 3)
        {
            Registry.SetValue(REG_KEY_IE_ZONE_4, "2500", 0);
        }
    }
    catch (Exception e)
    {
        // handle your exception or record it...
    }
}
这将修改注册表。。。所以通读代码并确保您理解它的作用。它对我有用。我看到不同的人有不同的行为,但这就是我必须做的

以下是官方要求披露:

IEDriverServer可执行文件必须下载并放置在您的路径中。 在Windows Vista或Windows 7上的IE 7或更高版本上,必须将每个区域的保护模式设置设置为相同的值。该值可以打开或关闭,只要每个分区的值相同。要设置受保护模式设置,请选择Internet选项。。。从“工具”菜单中,单击“安全”选项卡。对于每个区域,选项卡底部都会有一个复选框,标记为启用保护模式。 此外,IE 10及更高版本必须禁用增强保护模式。此选项位于“Internet选项”对话框的“高级”选项卡中。 浏览器缩放级别必须设置为100%,以便将本机鼠标事件设置为正确的坐标。 仅对于IE 11,您需要在目标计算机上设置一个注册表项,以便驱动程序能够保持与它创建的Internet Explorer实例的连接。对于32位Windows安装,您必须在注册表编辑器中检查的项是HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE\BFCACHE。对于64位Windows安装,密钥为HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE。请注意,FEATURE_BFCACHE子项可能存在,也可能不存在,如果不存在,则应创建该子项。要点:在此键内,创建一个名为iexplore.exe的DWORD值,其值为0。
还有一些其他需要考虑的因素,例如浏览器窗口的焦点,因此我建议仔细阅读驱动程序文档:

我相信您将C与Selenium结合使用。你能提供更多的细节吗。就像您试图访问的浏览器、框架和应用程序一样?@Rupesh:我正在自动化.net web应用程序。自动化正在IE8、9和10上运行,框架方法是页面驱动的…问题是..很多时候,这个黄色标志会随机出现在IE浏览器的底部&然后webdriver无法在我的页面上找到元素。此问题通常发生在自动化执行期间。是否在“完成”消息上显示任何鼠标悬停消息?如果是,那是什么?@Rupesh:第二张图片出现在点击完成标志后。所有这些页面。aspx,.js。,。。属于应用程序方面。不知何故,我认为问题可能来自应用程序方面。你们知道。。。我很好奇你是如何实现这个自动化的,你的JS是如何加载的。说我疯了,但我感觉Selenium和你的JS代码在页面上存在竞争条件。谢谢..@B.k的建议。我在VSTS10\Common7\IDE上保存了我的iedriver.exe文件&我已经启用了所有四种保护模式。zoom也设置为100%。我没有使用IE 11,所以我认为第五个建议在我的情况下是不必要的。IE浏览器中是否有内存泄漏的可能性。@AdityaK,我不认为这将是一个问题,将传播自己通过三个版本的IE,如果它是浏览器相关的。