diff --git a/WebDriver.sln b/WebDriver.sln index 3188f10802a6c..be267bee331c8 100644 --- a/WebDriver.sln +++ b/WebDriver.sln @@ -83,13 +83,11 @@ Global Debug|Mixed Platforms = Debug|Mixed Platforms Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 Release|.NET = Release|.NET Release|Any CPU = Release|Any CPU Release|Mixed Platforms = Release|Mixed Platforms Release|Win32 = Release|Win32 Release|x64 = Release|x64 - Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Debug|.NET.ActiveCfg = Debug|.NET @@ -97,25 +95,21 @@ Global {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Debug|Mixed Platforms.ActiveCfg = Debug|.NET {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Debug|Win32.ActiveCfg = Debug|.NET {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Debug|x64.ActiveCfg = Debug|.NET - {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Debug|x86.ActiveCfg = Debug|.NET {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Release|.NET.ActiveCfg = Debug|.NET {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Release|Any CPU.ActiveCfg = Debug|.NET {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Release|Mixed Platforms.ActiveCfg = Debug|.NET {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Release|Win32.ActiveCfg = Debug|.NET {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Release|x64.ActiveCfg = Debug|.NET - {DB560F4B-1F41-4E8E-AC06-640D736E8A72}.Release|x86.ActiveCfg = Debug|.NET {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Debug|.NET.ActiveCfg = Debug|Win32 {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Debug|Any CPU.ActiveCfg = Debug|Win32 {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Debug|Win32.ActiveCfg = Debug|Win32 {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Debug|x64.ActiveCfg = Debug|x64 - {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Debug|x86.ActiveCfg = Debug|x64 {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Release|.NET.ActiveCfg = Release|Win32 {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Release|Any CPU.ActiveCfg = Release|Win32 {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Release|Mixed Platforms.ActiveCfg = Release|Win32 {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Release|Win32.ActiveCfg = Release|Win32 {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Release|x64.ActiveCfg = Release|x64 - {0BC72326-88BE-4369-9077-74AA7B2BE15D}.Release|x86.ActiveCfg = Release|x64 {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Debug|.NET.ActiveCfg = Debug|Win32 {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Debug|Any CPU.ActiveCfg = Debug|Win32 {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 @@ -124,7 +118,6 @@ Global {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Debug|Win32.Build.0 = Debug|Win32 {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Debug|x64.ActiveCfg = Debug|x64 {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Debug|x64.Build.0 = Debug|x64 - {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Debug|x86.ActiveCfg = Debug|x64 {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Release|.NET.ActiveCfg = Release|Win32 {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Release|Any CPU.ActiveCfg = Release|Win32 {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Release|Mixed Platforms.ActiveCfg = Release|Win32 @@ -133,7 +126,6 @@ Global {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Release|Win32.Build.0 = Release|Win32 {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Release|x64.ActiveCfg = Release|x64 {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Release|x64.Build.0 = Release|x64 - {87FA39A1-958E-478A-8AB9-6D5E5AAA3886}.Release|x86.ActiveCfg = Release|x64 {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Debug|.NET.ActiveCfg = Debug|Win32 {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Debug|Any CPU.ActiveCfg = Debug|Win32 {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 @@ -141,7 +133,6 @@ Global {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Debug|Win32.ActiveCfg = Debug|Win32 {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Debug|Win32.Build.0 = Debug|Win32 {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Debug|x64.ActiveCfg = Debug|x64 - {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Debug|x86.ActiveCfg = Debug|x64 {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Release|.NET.ActiveCfg = Release|Win32 {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Release|Any CPU.ActiveCfg = Release|Win32 {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 @@ -149,7 +140,6 @@ Global {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Release|Win32.ActiveCfg = Release|Win32 {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Release|Win32.Build.0 = Release|Win32 {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Release|x64.ActiveCfg = Release|x64 - {A9D3BB2D-FD1E-43A2-80F6-F8320682323E}.Release|x86.ActiveCfg = Release|x64 {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Debug|.NET.ActiveCfg = Debug|Win32 {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Debug|Any CPU.ActiveCfg = Debug|Win32 {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 @@ -158,7 +148,6 @@ Global {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Debug|Win32.Build.0 = Debug|Win32 {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Debug|x64.ActiveCfg = Debug|x64 {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Debug|x64.Build.0 = Debug|x64 - {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Debug|x86.ActiveCfg = Debug|x64 {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Release|.NET.ActiveCfg = Release|Win32 {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Release|Any CPU.ActiveCfg = Release|Win32 {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Release|Mixed Platforms.ActiveCfg = Release|Win32 @@ -167,7 +156,6 @@ Global {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Release|Win32.Build.0 = Release|Win32 {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Release|x64.ActiveCfg = Release|x64 {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Release|x64.Build.0 = Release|x64 - {2A4FDEBC-1AB8-4E35-8806-E4CC12285526}.Release|x86.ActiveCfg = Release|x64 {BB72383B-427F-4191-B692-E4345A30E33C}.Debug|.NET.ActiveCfg = Debug|x64 {BB72383B-427F-4191-B692-E4345A30E33C}.Debug|Any CPU.ActiveCfg = Debug|Win32 {BB72383B-427F-4191-B692-E4345A30E33C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 @@ -176,7 +164,6 @@ Global {BB72383B-427F-4191-B692-E4345A30E33C}.Debug|Win32.Build.0 = Debug|Win32 {BB72383B-427F-4191-B692-E4345A30E33C}.Debug|x64.ActiveCfg = Debug|x64 {BB72383B-427F-4191-B692-E4345A30E33C}.Debug|x64.Build.0 = Debug|x64 - {BB72383B-427F-4191-B692-E4345A30E33C}.Debug|x86.ActiveCfg = Debug|x64 {BB72383B-427F-4191-B692-E4345A30E33C}.Release|.NET.ActiveCfg = Release|x64 {BB72383B-427F-4191-B692-E4345A30E33C}.Release|Any CPU.ActiveCfg = Release|Win32 {BB72383B-427F-4191-B692-E4345A30E33C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 @@ -185,7 +172,6 @@ Global {BB72383B-427F-4191-B692-E4345A30E33C}.Release|Win32.Build.0 = Release|Win32 {BB72383B-427F-4191-B692-E4345A30E33C}.Release|x64.ActiveCfg = Release|x64 {BB72383B-427F-4191-B692-E4345A30E33C}.Release|x64.Build.0 = Release|x64 - {BB72383B-427F-4191-B692-E4345A30E33C}.Release|x86.ActiveCfg = Release|x64 {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Debug|.NET.ActiveCfg = Debug|x64 {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Debug|Any CPU.ActiveCfg = Debug|x64 {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 @@ -194,7 +180,6 @@ Global {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Debug|Win32.Build.0 = Debug|Win32 {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Debug|x64.ActiveCfg = Debug|x64 {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Debug|x64.Build.0 = Debug|x64 - {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Debug|x86.ActiveCfg = Debug|x64 {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Release|.NET.ActiveCfg = Release|x64 {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Release|Any CPU.ActiveCfg = Release|x64 {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Release|Mixed Platforms.ActiveCfg = Release|x64 @@ -203,7 +188,6 @@ Global {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Release|Win32.Build.0 = Release|Win32 {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Release|x64.ActiveCfg = Release|x64 {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Release|x64.Build.0 = Release|x64 - {320F3BBE-8223-4E7F-ABEE-18D3BD57B1FD}.Release|x86.ActiveCfg = Release|x64 {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Debug|.NET.ActiveCfg = Debug|x64 {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Debug|Any CPU.ActiveCfg = Debug|x64 {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 @@ -212,7 +196,6 @@ Global {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Debug|Win32.Build.0 = Debug|Win32 {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Debug|x64.ActiveCfg = Debug|x64 {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Debug|x64.Build.0 = Debug|x64 - {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Debug|x86.ActiveCfg = Debug|x64 {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Release|.NET.ActiveCfg = Release|x64 {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Release|Any CPU.ActiveCfg = Release|x64 {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Release|Mixed Platforms.ActiveCfg = Release|x64 @@ -221,7 +204,6 @@ Global {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Release|Win32.Build.0 = Release|Win32 {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Release|x64.ActiveCfg = Release|x64 {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Release|x64.Build.0 = Release|x64 - {9AEBD612-232D-40CB-BE2C-F2B911FD6228}.Release|x86.ActiveCfg = Release|x64 {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Debug|.NET.ActiveCfg = Debug|Any CPU {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -229,7 +211,6 @@ Global {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Debug|Win32.ActiveCfg = Debug|Any CPU {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Debug|x64.ActiveCfg = Debug|Any CPU - {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Debug|x86.ActiveCfg = Debug|Any CPU {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Release|.NET.ActiveCfg = Debug|Any CPU {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Release|Any CPU.ActiveCfg = Release|Any CPU {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Release|Any CPU.Build.0 = Release|Any CPU @@ -237,25 +218,20 @@ Global {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Release|Mixed Platforms.Build.0 = Debug|Any CPU {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Release|Win32.ActiveCfg = Debug|Any CPU {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Release|x64.ActiveCfg = Debug|Any CPU - {69F4FF0E-13DE-4AF6-B8AF-572A36239083}.Release|x86.ActiveCfg = Debug|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Debug|.NET.ActiveCfg = Debug|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Debug|Any CPU.Build.0 = Debug|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Debug|Win32.ActiveCfg = Debug|Any CPU - {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Debug|x64.ActiveCfg = Debug|x86 - {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Debug|x86.ActiveCfg = Debug|x86 - {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Debug|x86.Build.0 = Debug|x86 + {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Debug|x64.ActiveCfg = Debug|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Release|.NET.ActiveCfg = Release|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Release|Any CPU.ActiveCfg = Release|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Release|Any CPU.Build.0 = Release|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Release|Mixed Platforms.Build.0 = Release|Any CPU {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Release|Win32.ActiveCfg = Release|Any CPU - {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Release|x64.ActiveCfg = Release|x86 - {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Release|x86.ActiveCfg = Release|x86 - {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Release|x86.Build.0 = Release|x86 + {0EAF6AA9-B712-464B-A11B-FA3CF7577D80}.Release|x64.ActiveCfg = Release|Any CPU {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Debug|.NET.ActiveCfg = Debug|Any CPU {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -263,7 +239,6 @@ Global {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Debug|Win32.ActiveCfg = Debug|Any CPU {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Debug|x64.ActiveCfg = Debug|Any CPU - {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Debug|x86.ActiveCfg = Debug|Any CPU {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Release|.NET.ActiveCfg = Release|Any CPU {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Release|Any CPU.ActiveCfg = Release|Any CPU {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Release|Any CPU.Build.0 = Release|Any CPU @@ -271,7 +246,6 @@ Global {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Release|Mixed Platforms.Build.0 = Release|Any CPU {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Release|Win32.ActiveCfg = Release|Any CPU {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Release|x64.ActiveCfg = Release|Any CPU - {FC3000BD-6144-46E6-BA7B-1CCE7E85DD27}.Release|x86.ActiveCfg = Release|Any CPU {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Debug|.NET.ActiveCfg = Debug|Any CPU {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -279,7 +253,6 @@ Global {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Debug|Win32.ActiveCfg = Debug|Any CPU {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Debug|x64.ActiveCfg = Debug|Any CPU - {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Debug|x86.ActiveCfg = Debug|Any CPU {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Release|.NET.ActiveCfg = Release|Any CPU {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Release|Any CPU.ActiveCfg = Release|Any CPU {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Release|Any CPU.Build.0 = Release|Any CPU @@ -287,7 +260,6 @@ Global {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Release|Mixed Platforms.Build.0 = Release|Any CPU {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Release|Win32.ActiveCfg = Release|Any CPU {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Release|x64.ActiveCfg = Release|Any CPU - {ABB9B87F-FEEA-410E-ACBF-26479B8C72B0}.Release|x86.ActiveCfg = Release|Any CPU {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Debug|.NET.ActiveCfg = Debug|Any CPU {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -295,7 +267,6 @@ Global {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Debug|Win32.ActiveCfg = Debug|Any CPU {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Debug|x64.ActiveCfg = Debug|Any CPU - {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Debug|x86.ActiveCfg = Debug|Any CPU {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Release|.NET.ActiveCfg = Release|Any CPU {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Release|Any CPU.Build.0 = Release|Any CPU @@ -303,7 +274,6 @@ Global {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Release|Mixed Platforms.Build.0 = Release|Any CPU {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Release|Win32.ActiveCfg = Release|Any CPU {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Release|x64.ActiveCfg = Release|Any CPU - {C2A1DAE4-BB20-4367-8ADC-D32EEA392D17}.Release|x86.ActiveCfg = Release|Any CPU {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Debug|.NET.ActiveCfg = Debug|Any CPU {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -311,7 +281,6 @@ Global {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Debug|Win32.ActiveCfg = Debug|Any CPU {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Debug|x64.ActiveCfg = Debug|Any CPU - {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Debug|x86.ActiveCfg = Debug|Any CPU {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Release|.NET.ActiveCfg = Release|Any CPU {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Release|Any CPU.ActiveCfg = Release|Any CPU {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Release|Any CPU.Build.0 = Release|Any CPU @@ -319,7 +288,6 @@ Global {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Release|Mixed Platforms.Build.0 = Release|Any CPU {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Release|Win32.ActiveCfg = Release|Any CPU {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Release|x64.ActiveCfg = Release|Any CPU - {32122F8D-CD64-495A-B9B0-5516FF67C79F}.Release|x86.ActiveCfg = Release|Any CPU {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Debug|.NET.ActiveCfg = Debug|Any CPU {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -327,7 +295,6 @@ Global {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Debug|Win32.ActiveCfg = Debug|Any CPU {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Debug|x64.ActiveCfg = Debug|Any CPU - {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Debug|x86.ActiveCfg = Debug|Any CPU {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Release|.NET.ActiveCfg = Release|Any CPU {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Release|Any CPU.ActiveCfg = Release|Any CPU {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Release|Any CPU.Build.0 = Release|Any CPU @@ -335,7 +302,6 @@ Global {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Release|Mixed Platforms.Build.0 = Release|Any CPU {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Release|Win32.ActiveCfg = Release|Any CPU {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Release|x64.ActiveCfg = Release|Any CPU - {5E7C67A1-1BF2-4A46-8C29-8A6DCF6E4543}.Release|x86.ActiveCfg = Release|Any CPU {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Debug|.NET.ActiveCfg = Debug|Any CPU {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -343,7 +309,6 @@ Global {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Debug|Win32.ActiveCfg = Debug|Any CPU {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Debug|x64.ActiveCfg = Debug|Any CPU - {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Debug|x86.ActiveCfg = Debug|Any CPU {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Release|.NET.ActiveCfg = Release|Any CPU {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Release|Any CPU.ActiveCfg = Release|Any CPU {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Release|Any CPU.Build.0 = Release|Any CPU @@ -351,7 +316,6 @@ Global {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Release|Mixed Platforms.Build.0 = Release|Any CPU {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Release|Win32.ActiveCfg = Release|Any CPU {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Release|x64.ActiveCfg = Release|Any CPU - {388643B5-2270-4E89-99CC-DA761E4E4AC1}.Release|x86.ActiveCfg = Release|Any CPU {A9779443-E254-47E9-B733-8AC6D3662CA6}.Debug|.NET.ActiveCfg = Debug|Any CPU {A9779443-E254-47E9-B733-8AC6D3662CA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A9779443-E254-47E9-B733-8AC6D3662CA6}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -359,7 +323,6 @@ Global {A9779443-E254-47E9-B733-8AC6D3662CA6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {A9779443-E254-47E9-B733-8AC6D3662CA6}.Debug|Win32.ActiveCfg = Debug|Any CPU {A9779443-E254-47E9-B733-8AC6D3662CA6}.Debug|x64.ActiveCfg = Debug|Any CPU - {A9779443-E254-47E9-B733-8AC6D3662CA6}.Debug|x86.ActiveCfg = Debug|Any CPU {A9779443-E254-47E9-B733-8AC6D3662CA6}.Release|.NET.ActiveCfg = Release|Any CPU {A9779443-E254-47E9-B733-8AC6D3662CA6}.Release|Any CPU.ActiveCfg = Release|Any CPU {A9779443-E254-47E9-B733-8AC6D3662CA6}.Release|Any CPU.Build.0 = Release|Any CPU @@ -367,7 +330,6 @@ Global {A9779443-E254-47E9-B733-8AC6D3662CA6}.Release|Mixed Platforms.Build.0 = Release|Any CPU {A9779443-E254-47E9-B733-8AC6D3662CA6}.Release|Win32.ActiveCfg = Release|Any CPU {A9779443-E254-47E9-B733-8AC6D3662CA6}.Release|x64.ActiveCfg = Release|Any CPU - {A9779443-E254-47E9-B733-8AC6D3662CA6}.Release|x86.ActiveCfg = Release|Any CPU {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Debug|.NET.ActiveCfg = Debug|Any CPU {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -375,7 +337,6 @@ Global {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Debug|Win32.ActiveCfg = Debug|Any CPU {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Debug|x64.ActiveCfg = Debug|Any CPU - {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Debug|x86.ActiveCfg = Debug|Any CPU {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Release|.NET.ActiveCfg = Release|Any CPU {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Release|Any CPU.ActiveCfg = Release|Any CPU {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Release|Any CPU.Build.0 = Release|Any CPU @@ -383,7 +344,6 @@ Global {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Release|Mixed Platforms.Build.0 = Release|Any CPU {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Release|Win32.ActiveCfg = Release|Any CPU {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Release|x64.ActiveCfg = Release|Any CPU - {1580564D-B6B8-4BD8-A120-001E3E8E5BE6}.Release|x86.ActiveCfg = Release|Any CPU {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Debug|.NET.ActiveCfg = Debug|Any CPU {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -391,7 +351,6 @@ Global {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Debug|Win32.ActiveCfg = Debug|Any CPU {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Debug|x64.ActiveCfg = Debug|Any CPU - {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Debug|x86.ActiveCfg = Debug|Any CPU {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Release|.NET.ActiveCfg = Release|Any CPU {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Release|Any CPU.ActiveCfg = Release|Any CPU {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Release|Any CPU.Build.0 = Release|Any CPU @@ -399,7 +358,6 @@ Global {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Release|Mixed Platforms.Build.0 = Release|Any CPU {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Release|Win32.ActiveCfg = Release|Any CPU {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Release|x64.ActiveCfg = Release|Any CPU - {1D3DF4DB-6C11-480D-9774-F489B2EF62D8}.Release|x86.ActiveCfg = Release|Any CPU {81D664AA-FC03-425E-98A8-B4EAF8236776}.Debug|.NET.ActiveCfg = Debug|Any CPU {81D664AA-FC03-425E-98A8-B4EAF8236776}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81D664AA-FC03-425E-98A8-B4EAF8236776}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -407,7 +365,6 @@ Global {81D664AA-FC03-425E-98A8-B4EAF8236776}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {81D664AA-FC03-425E-98A8-B4EAF8236776}.Debug|Win32.ActiveCfg = Debug|Any CPU {81D664AA-FC03-425E-98A8-B4EAF8236776}.Debug|x64.ActiveCfg = Debug|Any CPU - {81D664AA-FC03-425E-98A8-B4EAF8236776}.Debug|x86.ActiveCfg = Debug|Any CPU {81D664AA-FC03-425E-98A8-B4EAF8236776}.Release|.NET.ActiveCfg = Release|Any CPU {81D664AA-FC03-425E-98A8-B4EAF8236776}.Release|Any CPU.ActiveCfg = Release|Any CPU {81D664AA-FC03-425E-98A8-B4EAF8236776}.Release|Any CPU.Build.0 = Release|Any CPU @@ -415,7 +372,6 @@ Global {81D664AA-FC03-425E-98A8-B4EAF8236776}.Release|Mixed Platforms.Build.0 = Release|Any CPU {81D664AA-FC03-425E-98A8-B4EAF8236776}.Release|Win32.ActiveCfg = Release|Any CPU {81D664AA-FC03-425E-98A8-B4EAF8236776}.Release|x64.ActiveCfg = Release|Any CPU - {81D664AA-FC03-425E-98A8-B4EAF8236776}.Release|x86.ActiveCfg = Release|Any CPU {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Debug|.NET.ActiveCfg = Debug|Any CPU {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -423,7 +379,6 @@ Global {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Debug|Win32.ActiveCfg = Debug|Any CPU {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Debug|x64.ActiveCfg = Debug|Any CPU - {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Debug|x86.ActiveCfg = Debug|Any CPU {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Release|.NET.ActiveCfg = Release|Any CPU {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Release|Any CPU.ActiveCfg = Release|Any CPU {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Release|Any CPU.Build.0 = Release|Any CPU @@ -431,7 +386,6 @@ Global {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Release|Mixed Platforms.Build.0 = Release|Any CPU {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Release|Win32.ActiveCfg = Release|Any CPU {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Release|x64.ActiveCfg = Release|Any CPU - {630FC167-169E-4CFD-83ED-9BA4AA8A0FB4}.Release|x86.ActiveCfg = Release|Any CPU {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Debug|.NET.ActiveCfg = Debug|Any CPU {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -439,7 +393,6 @@ Global {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Debug|Win32.ActiveCfg = Debug|Any CPU {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Debug|x64.ActiveCfg = Debug|Any CPU - {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Debug|x86.ActiveCfg = Debug|Any CPU {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Release|.NET.ActiveCfg = Release|Any CPU {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Release|Any CPU.ActiveCfg = Release|Any CPU {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Release|Any CPU.Build.0 = Release|Any CPU @@ -447,7 +400,6 @@ Global {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Release|Mixed Platforms.Build.0 = Release|Any CPU {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Release|Win32.ActiveCfg = Release|Any CPU {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Release|x64.ActiveCfg = Release|Any CPU - {ECF3B49F-68B0-4A2A-8559-6D7FB906AA88}.Release|x86.ActiveCfg = Release|Any CPU {1B70379B-5325-4243-8629-5C32802E9826}.Debug|.NET.ActiveCfg = Debug|Any CPU {1B70379B-5325-4243-8629-5C32802E9826}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1B70379B-5325-4243-8629-5C32802E9826}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -455,7 +407,6 @@ Global {1B70379B-5325-4243-8629-5C32802E9826}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {1B70379B-5325-4243-8629-5C32802E9826}.Debug|Win32.ActiveCfg = Debug|Any CPU {1B70379B-5325-4243-8629-5C32802E9826}.Debug|x64.ActiveCfg = Debug|Any CPU - {1B70379B-5325-4243-8629-5C32802E9826}.Debug|x86.ActiveCfg = Debug|Any CPU {1B70379B-5325-4243-8629-5C32802E9826}.Release|.NET.ActiveCfg = Release|Any CPU {1B70379B-5325-4243-8629-5C32802E9826}.Release|Any CPU.ActiveCfg = Release|Any CPU {1B70379B-5325-4243-8629-5C32802E9826}.Release|Any CPU.Build.0 = Release|Any CPU @@ -463,7 +414,6 @@ Global {1B70379B-5325-4243-8629-5C32802E9826}.Release|Mixed Platforms.Build.0 = Release|Any CPU {1B70379B-5325-4243-8629-5C32802E9826}.Release|Win32.ActiveCfg = Release|Any CPU {1B70379B-5325-4243-8629-5C32802E9826}.Release|x64.ActiveCfg = Release|Any CPU - {1B70379B-5325-4243-8629-5C32802E9826}.Release|x86.ActiveCfg = Release|Any CPU {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Debug|.NET.ActiveCfg = Debug|Any CPU {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -471,7 +421,6 @@ Global {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Debug|Win32.ActiveCfg = Debug|Any CPU {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Debug|x64.ActiveCfg = Debug|Any CPU - {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Debug|x86.ActiveCfg = Debug|Any CPU {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Release|.NET.ActiveCfg = Release|Any CPU {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Release|Any CPU.ActiveCfg = Release|Any CPU {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Release|Any CPU.Build.0 = Release|Any CPU @@ -479,7 +428,6 @@ Global {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Release|Mixed Platforms.Build.0 = Release|Any CPU {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Release|Win32.ActiveCfg = Release|Any CPU {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Release|x64.ActiveCfg = Release|Any CPU - {42D1B587-9544-452F-8B76-4F2A65BC9BE5}.Release|x86.ActiveCfg = Release|Any CPU {68CF4628-4148-4627-ACA1-D4C225365D3F}.Debug|.NET.ActiveCfg = Debug|Any CPU {68CF4628-4148-4627-ACA1-D4C225365D3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {68CF4628-4148-4627-ACA1-D4C225365D3F}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -487,7 +435,6 @@ Global {68CF4628-4148-4627-ACA1-D4C225365D3F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {68CF4628-4148-4627-ACA1-D4C225365D3F}.Debug|Win32.ActiveCfg = Debug|Any CPU {68CF4628-4148-4627-ACA1-D4C225365D3F}.Debug|x64.ActiveCfg = Debug|Any CPU - {68CF4628-4148-4627-ACA1-D4C225365D3F}.Debug|x86.ActiveCfg = Debug|Any CPU {68CF4628-4148-4627-ACA1-D4C225365D3F}.Release|.NET.ActiveCfg = Release|Any CPU {68CF4628-4148-4627-ACA1-D4C225365D3F}.Release|Any CPU.ActiveCfg = Release|Any CPU {68CF4628-4148-4627-ACA1-D4C225365D3F}.Release|Any CPU.Build.0 = Release|Any CPU @@ -495,7 +442,6 @@ Global {68CF4628-4148-4627-ACA1-D4C225365D3F}.Release|Mixed Platforms.Build.0 = Release|Any CPU {68CF4628-4148-4627-ACA1-D4C225365D3F}.Release|Win32.ActiveCfg = Release|Any CPU {68CF4628-4148-4627-ACA1-D4C225365D3F}.Release|x64.ActiveCfg = Release|Any CPU - {68CF4628-4148-4627-ACA1-D4C225365D3F}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/cpp/IEDriver/BrowserManager.cpp b/cpp/IEDriver/BrowserManager.cpp index 8a6a264d7eb9c..52b7202146bf8 100644 --- a/cpp/IEDriver/BrowserManager.cpp +++ b/cpp/IEDriver/BrowserManager.cpp @@ -10,13 +10,7 @@ #include "ElementEqualsCommandHandler.h" #include "ExecuteAsyncScriptCommandHandler.h" #include "ExecuteScriptCommandHandler.h" -#include "FindByClassNameElementFinder.h" #include "FindByCssSelectorElementFinder.h" -#include "FindByIdElementFinder.h" -#include "FindByLinkTextElementFinder.h" -#include "FindByNameElementFinder.h" -#include "FindByPartialLinkTextElementFinder.h" -#include "FindByTagNameElementFinder.h" #include "FindByXPathElementFinder.h" #include "FindChildElementCommandHandler.h" #include "FindChildElementsCommandHandler.h" @@ -354,14 +348,16 @@ void BrowserManager::BrowserQuittingEventHandler(std::wstring browser_id) { } void BrowserManager::PopulateElementFinderRepository(void) { - this->element_finders_[L"id"] = new FindByIdElementFinder; - this->element_finders_[L"name"] = new FindByNameElementFinder; - this->element_finders_[L"tag name"] = new FindByTagNameElementFinder; - this->element_finders_[L"link text"] = new FindByLinkTextElementFinder; - this->element_finders_[L"partial link text"] = new FindByPartialLinkTextElementFinder; - this->element_finders_[L"class name"] = new FindByClassNameElementFinder; - this->element_finders_[L"xpath"] = new FindByXPathElementFinder; - this->element_finders_[L"css selector"] = new FindByCssSelectorElementFinder; + // TODO (JimEvans): This is left over from a previous method of finding + // elements. This needs to be completely refactored. + this->element_finders_[L"id"] = new ElementFinder(L"id"); + this->element_finders_[L"name"] = new ElementFinder(L"name"); + this->element_finders_[L"tag name"] = new ElementFinder(L"tagName"); + this->element_finders_[L"link text"] = new ElementFinder(L"linkText"); + this->element_finders_[L"partial link text"] = new ElementFinder(L"partialLinkText"); + this->element_finders_[L"class name"] = new ElementFinder(L"className"); + this->element_finders_[L"xpath"] = new FindByXPathElementFinder(L"xpath"); + this->element_finders_[L"css selector"] = new FindByCssSelectorElementFinder(L"css"); } void BrowserManager::PopulateCommandHandlerRepository() { diff --git a/cpp/IEDriver/ElementFinder.cpp b/cpp/IEDriver/ElementFinder.cpp index db00a40c6f10b..d0f57f39d3231 100644 --- a/cpp/IEDriver/ElementFinder.cpp +++ b/cpp/IEDriver/ElementFinder.cpp @@ -1,146 +1,102 @@ #include "StdAfx.h" +#include "atoms.h" #include "BrowserManager.h" namespace webdriver { -ElementFinder::ElementFinder(void) { +ElementFinder::ElementFinder(std::wstring locator) { + this->locator_ = locator; } ElementFinder::~ElementFinder(void) { } -int ElementFinder::FindElement(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, ElementWrapper **found_element) { +int ElementFinder::FindElement(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, Json::Value *found_element) { BrowserWrapper *browser; int status_code = manager->GetCurrentBrowser(&browser); if (status_code == SUCCESS) { - IHTMLElement *parent_element; - status_code = this->GetParentElement(browser, parent_wrapper, &parent_element); + std::wstring criteria_object_script = L"(function() { return function(){ return { " + this->locator_ + L" : \"" + criteria + L"\" }; };})();"; + ScriptWrapper *criteria_wrapper = new ScriptWrapper(criteria_object_script, 0); + status_code = browser->ExecuteScript(criteria_wrapper); if (status_code == SUCCESS) { - IHTMLElement *element; - status_code = this->FindElementInternal(browser, parent_element, criteria, &element); - if (status_code == SUCCESS) { - ElementWrapper *wrapper; - manager->AddManagedElement(element, &wrapper); - *found_element = wrapper; + CComVariant criteria_object; + ::VariantCopy(&criteria_object, &criteria_wrapper->result()); + + // The atom is just the definition of an anonymous + // function: "function() {...}"; Wrap it in another function so we can + // invoke it with our arguments without polluting the current namespace. + std::wstring script(L"(function() { return ("); + + // Read in all the scripts + for (int j = 0; FIND_ELEMENT[j]; j++) { + script += FIND_ELEMENT[j]; + } + + // Now for the magic and to close things + script += L")})();"; + + ScriptWrapper *script_wrapper = new ScriptWrapper(script, 2); + script_wrapper->AddArgument(criteria_object); + if (parent_wrapper) { + script_wrapper->AddArgument(parent_wrapper->element()); } + + status_code = browser->ExecuteScript(script_wrapper); + if (status_code == SUCCESS && script_wrapper->ResultIsElement()) { + script_wrapper->ConvertResultToJsonValue(manager, found_element); + } else { + status_code = ENOSUCHELEMENT; + } + delete script_wrapper; + } else { + status_code = ENOSUCHELEMENT; } + delete criteria_wrapper; } return status_code; } -int ElementFinder::FindElements(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, std::vector *found_elements) { +int ElementFinder::FindElements(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, Json::Value *found_elements) { BrowserWrapper *browser; int status_code = manager->GetCurrentBrowser(&browser); if (status_code == SUCCESS) { - IHTMLElement *parent_element; - status_code = this->GetParentElement(browser, parent_wrapper, &parent_element); + std::wstring criteria_object_script = L"(function() { return function(){ return { " + this->locator_ + L" : \"" + criteria + L"\" }; };})();"; + ScriptWrapper *criteria_wrapper = new ScriptWrapper(criteria_object_script, 0); + status_code = browser->ExecuteScript(criteria_wrapper); if (status_code == SUCCESS) { - std::vector raw_elements; - status_code = this->FindElementsInternal(browser, parent_element, criteria, &raw_elements); - std::vector::iterator begin = raw_elements.begin(); - std::vector::iterator end = raw_elements.end(); - for (std::vector::iterator it = begin; it != end; ++it) { - ElementWrapper *wrapper; - manager->AddManagedElement(*it, &wrapper); - found_elements->push_back(wrapper); - } - } - } - return status_code; -} - -int ElementFinder::FindElementInternal(BrowserWrapper *browser, IHTMLElement *parent_element, std::wstring criteria, IHTMLElement **element) { - return ENOSUCHELEMENT; -} - -int ElementFinder::FindElementsInternal(BrowserWrapper *browser, IHTMLElement *parent_element, std::wstring criteria, std::vector *elements) { - return ENOSUCHELEMENT; -} + CComVariant criteria_object; + ::VariantCopy(&criteria_object, &criteria_wrapper->result()); -void ElementFinder::GetHtmlDocument3(BrowserWrapper *browser, IHTMLDocument3 **doc3) { - CComPtr doc; - browser->GetDocument(&doc); + // The atom is just the definition of an anonymous + // function: "function() {...}"; Wrap it in another function so we can + // invoke it with our arguments without polluting the current namespace. + std::wstring script(L"(function() { return ("); - CComQIPtr doc3_qi_pointer(doc); - if (doc3_qi_pointer) { - *doc3 = doc3_qi_pointer.Detach(); - } -} - -void ElementFinder::ExtractHtmlDocument3FromDomNode(const IHTMLDOMNode* extraction_node, IHTMLDocument3** doc) { - CComQIPtr element(const_cast(extraction_node)); - - CComPtr dispatch; - element->get_ownerDocument(&dispatch); - - CComQIPtr doc_qi_pointer(dispatch); - *doc = doc_qi_pointer.Detach(); -} - -void ElementFinder::ExtractHtmlDocument2FromDomNode(const IHTMLDOMNode* extraction_node, IHTMLDocument2** doc) { - CComQIPtr element(const_cast(extraction_node)); + // Read in all the scripts + for (int j = 0; FIND_ELEMENTS[j]; j++) { + script += FIND_ELEMENTS[j]; + } - CComPtr dispatch; - element->get_ownerDocument(&dispatch); + // Now for the magic and to close things + script += L")})();"; - CComQIPtr doc_qi_pointer(dispatch); - *doc = doc_qi_pointer.Detach(); -} + ScriptWrapper *script_wrapper = new ScriptWrapper(script, 2); + script_wrapper->AddArgument(criteria_object); + if (parent_wrapper) { + script_wrapper->AddArgument(parent_wrapper->element()); + } -int ElementFinder::GetParentElement(BrowserWrapper *browser, ElementWrapper *parent_wrapper, IHTMLElement **parent_element) { - int status_code = SUCCESS; - if (parent_wrapper != NULL) { - *parent_element = parent_wrapper->element(); - } else { - // No parent element specified, so get the root document - // element as the parent element. - CComPtr root_doc; - this->GetHtmlDocument3(browser, &root_doc); - if (!root_doc) { - status_code = ENOSUCHDOCUMENT; - } else { - root_doc->get_documentElement(parent_element); + status_code = browser->ExecuteScript(script_wrapper); + if (status_code == SUCCESS) { + if (script_wrapper->ResultIsArray() || script_wrapper->ResultIsElementCollection()) { + script_wrapper->ConvertResultToJsonValue(manager, found_elements); + } + } + delete script_wrapper; } + delete criteria_wrapper; } - return status_code; } -bool ElementFinder::IsOrUnder(const IHTMLDOMNode* root, IHTMLElement* child) { - CComQIPtr parent(const_cast(root)); - - if (!parent) { - return true; - } - - VARIANT_BOOL to_return; - HRESULT hr = parent->contains(child, &to_return); - if (FAILED(hr)) { - // LOGHR(WARN, hr) << "Cannot determine if parent contains child node"; - return false; - } - - return to_return == VARIANT_TRUE; -} - -bool ElementFinder::IsUnder(const IHTMLDOMNode* root, IHTMLElement* child) { - CComQIPtr child_node(child); - return this->IsOrUnder(root, child) && root != child_node; -} - -std::wstring ElementFinder::StripTrailingWhitespace(std::wstring input) { - // TODO: make the whitespace finder more comprehensive. - std::wstring whitespace = L" \t\n\f\v\r"; - if (input.length() == 0) { - return input; - } - - size_t pos = input.find_last_not_of(whitespace); - if ((pos + 1) == input.length() || pos == std::string::npos) { - return input; - } - - return input.substr(0, (pos + 1)); -} - } // namespace webdriver \ No newline at end of file diff --git a/cpp/IEDriver/ElementFinder.h b/cpp/IEDriver/ElementFinder.h index 6b720e24f2457..d0798fef8658b 100644 --- a/cpp/IEDriver/ElementFinder.h +++ b/cpp/IEDriver/ElementFinder.h @@ -15,23 +15,13 @@ class BrowserManager; class ElementFinder { public: - ElementFinder(void); + ElementFinder(std::wstring locator); virtual ~ElementFinder(void); - int FindElement(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, ElementWrapper **found_element); - int FindElements(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, std::vector *found_elements); - -protected: - virtual int FindElementInternal(BrowserWrapper *browser, IHTMLElement *parent_element, std::wstring criteria, IHTMLElement **found_element); - virtual int FindElementsInternal(BrowserWrapper *browser, IHTMLElement *parent_element, std::wstring criteria, std::vector *found_elements); - void GetHtmlDocument3(BrowserWrapper *browser, IHTMLDocument3 **doc3); - void ExtractHtmlDocument2FromDomNode(const IHTMLDOMNode* extraction_node, IHTMLDocument2** doc); - void ExtractHtmlDocument3FromDomNode(const IHTMLDOMNode* extraction_node, IHTMLDocument3** doc); - bool IsOrUnder(const IHTMLDOMNode* root, IHTMLElement* child); - bool IsUnder(const IHTMLDOMNode* root, IHTMLElement* child); - std::wstring StripTrailingWhitespace(std::wstring input); + virtual int FindElement(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, Json::Value *found_element); + virtual int FindElements(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, Json::Value *found_elements); private: - int GetParentElement(BrowserWrapper *browser, ElementWrapper *parent_wrapper, IHTMLElement **parent_element); + std::wstring locator_; }; } // namespace webdriver diff --git a/cpp/IEDriver/ExecuteScriptCommandHandler.h b/cpp/IEDriver/ExecuteScriptCommandHandler.h index a87c0c95e450b..7f1e55484adcd 100644 --- a/cpp/IEDriver/ExecuteScriptCommandHandler.h +++ b/cpp/IEDriver/ExecuteScriptCommandHandler.h @@ -87,88 +87,6 @@ class ExecuteScriptCommandHandler : public WebDriverCommandHandler { return status_code; } -// -// int ExecuteScriptCommandHandler::ConvertScriptResult(ScriptWrapper *script_wrapper, BrowserManager *manager, Json::Value *value) { -// int status_code = SUCCESS; -// CComVariant result(script_wrapper->result()); -// if (script_wrapper->ResultIsString()) { -// std::string string_value; -// string_value = CW2A(script_wrapper->result().bstrVal, CP_UTF8); -// *value = string_value; -// } else if (script_wrapper->ResultIsInteger()) { -// *value = script_wrapper->result().lVal; -// } else if (script_wrapper->ResultIsDouble()) { -// *value = script_wrapper->result().dblVal; -// } else if (script_wrapper->ResultIsBoolean()) { -// *value = script_wrapper->result().boolVal == VARIANT_TRUE; -// } else if (script_wrapper->ResultIsEmpty()) { -// *value = Json::Value::null; -// } else if (script_wrapper->ResultIsIDispatch()) { -// if (script_wrapper->ResultIsArray() || script_wrapper->ResultIsElementCollection()) { -// BrowserWrapper *browser_wrapper; -// manager->GetCurrentBrowser(&browser_wrapper); -// Json::Value result_array(Json::arrayValue); -// -// long length = 0; -// this->GetArrayLength(script_wrapper, browser_wrapper, &length); -// -// for (long i = 0; i < length; ++i) { -// Json::Value array_item_result; -// int array_item_status = this->GetArrayItem(script_wrapper, browser_wrapper, manager, i, &array_item_result); -// result_array[i] = array_item_result; -// } -// *value = result_array; -// } else { -// IHTMLElement *node = (IHTMLElement*) script_wrapper->result().pdispVal; -// ElementWrapper *element_wrapper; -// manager->AddManagedElement(node, &element_wrapper); -// *value = element_wrapper->ConvertToJson(); -// } -// } else { -// status_code = EUNKNOWNSCRIPTRESULT; -// } -// return status_code; -// } -// -//private: -// int ExecuteScriptCommandHandler::GetArrayLength(ScriptWrapper *array_script_wrapper, BrowserWrapper *browser_wrapper, long *length) { -// // Prepare an array for the Javascript execution, containing only one -// // element - the original returned array from a JS execution. -// std::wstring get_length_script(L"(function(){return function() {return arguments[0].length;}})();"); -// ScriptWrapper *get_length_script_wrapper = new ScriptWrapper(get_length_script, 1); -// get_length_script_wrapper->AddArgument(array_script_wrapper->result()); -// int length_result = browser_wrapper->ExecuteScript(get_length_script_wrapper); -// -// if (length_result != SUCCESS) { -// return length_result; -// } -// -// // Expect the return type to be an integer. A non-integer means this was -// // not an array after all. -// if (!get_length_script_wrapper->ResultIsInteger()) { -// return EUNEXPECTEDJSERROR; -// } -// -// *length = get_length_script_wrapper->result().lVal; -// delete get_length_script_wrapper; -// return SUCCESS; -// } -// -// int ExecuteScriptCommandHandler::GetArrayItem(ScriptWrapper *array_script_wrapper, BrowserWrapper *browser_wrapper, BrowserManager *manager, long index, Json::Value *item){ -// std::wstring get_array_item_script(L"(function(){return function() {return arguments[0][arguments[1]];}})();"); -// ScriptWrapper *get_array_item_script_wrapper = new ScriptWrapper(get_array_item_script, 2); -// get_array_item_script_wrapper->AddArgument(array_script_wrapper->result()); -// get_array_item_script_wrapper->AddArgument(index); -// int get_item_result = browser_wrapper->ExecuteScript(get_array_item_script_wrapper); -// if (get_item_result != SUCCESS) { -// return get_item_result; -// } -// -// Json::Value array_item_result; -// int array_item_status = this->ConvertScriptResult(get_array_item_script_wrapper, manager, item); -// delete get_array_item_script_wrapper; -// return SUCCESS; -// } }; } // namespace webdriver diff --git a/cpp/IEDriver/FindByCssSelectorElementFinder.h b/cpp/IEDriver/FindByCssSelectorElementFinder.h index 6d613d5df0980..4d767b22c0f2b 100644 --- a/cpp/IEDriver/FindByCssSelectorElementFinder.h +++ b/cpp/IEDriver/FindByCssSelectorElementFinder.h @@ -8,16 +8,21 @@ namespace webdriver { class FindByCssSelectorElementFinder : public ElementFinder { public: - FindByCssSelectorElementFinder(void) { + FindByCssSelectorElementFinder(std::wstring locator) : ElementFinder(locator) { } virtual ~FindByCssSelectorElementFinder(void) { } -protected: - int FindByCssSelectorElementFinder::FindElementInternal(BrowserWrapper *browser, IHTMLElement *parent_element, std::wstring criteria, IHTMLElement **found_element) { + int FindByCssSelectorElementFinder::FindElement(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, Json::Value *found_element) { int result = ENOSUCHELEMENT; + BrowserWrapper *browser; + result = manager->GetCurrentBrowser(&browser); + if (result != SUCCESS) { + return result; + } + std::wstring script(L"(function() { return function(){"); for (int i = 0; SIZZLE[i]; i++) { script += SIZZLE[i]; @@ -31,8 +36,8 @@ class FindByCssSelectorElementFinder : public ElementFinder { ScriptWrapper *script_wrapper = new ScriptWrapper(script, 2); script_wrapper->AddArgument(criteria); - if (parent_element) { - CComPtr parent(parent_element); + if (parent_wrapper) { + CComPtr parent(parent_wrapper->element()); IHTMLElement* parent_element_copy; parent.CopyTo(&parent_element_copy); script_wrapper->AddArgument(parent_element_copy); @@ -40,10 +45,10 @@ class FindByCssSelectorElementFinder : public ElementFinder { result = browser->ExecuteScript(script_wrapper); if (result == SUCCESS) { - if (script_wrapper->ResultIsEmpty()) { + if (!script_wrapper->ResultIsElement()) { result = ENOSUCHELEMENT; } else { - *found_element = (IHTMLElement*)script_wrapper->result().pdispVal; + result = script_wrapper->ConvertResultToJsonValue(manager, found_element); } } delete script_wrapper; @@ -51,10 +56,15 @@ class FindByCssSelectorElementFinder : public ElementFinder { return result; } - int FindByCssSelectorElementFinder::FindElementsInternal(BrowserWrapper *browser, IHTMLElement *parent_element, std::wstring criteria, std::vector *found_elements) - { + int FindByCssSelectorElementFinder::FindElements(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, Json::Value *found_elements) { int result = ENOSUCHELEMENT; + BrowserWrapper *browser; + result = manager->GetCurrentBrowser(&browser); + if (result != SUCCESS) { + return result; + } + std::wstring script(L"(function() { return function(){"); for (int i = 0; SIZZLE[i]; i++) { script += SIZZLE[i]; @@ -68,9 +78,9 @@ class FindByCssSelectorElementFinder : public ElementFinder { ScriptWrapper *script_wrapper = new ScriptWrapper(script, 2); script_wrapper->AddArgument(criteria); - if (parent_element) { + if (parent_wrapper) { // Use a copy for the parent element? - CComPtr parent(parent_element); + CComPtr parent(parent_wrapper->element()); IHTMLElement* parent_element_copy; parent.CopyTo(&parent_element_copy); script_wrapper->AddArgument(parent_element_copy); @@ -94,8 +104,9 @@ class FindByCssSelectorElementFinder : public ElementFinder { get_element_script_wrapper->AddArgument(snapshot); get_element_script_wrapper->AddArgument(i); result = browser->ExecuteScript(get_element_script_wrapper); - IHTMLElement *found_element = (IHTMLElement *)get_element_script_wrapper->result().pdispVal; - found_elements->push_back(found_element); + Json::Value json_element; + get_element_script_wrapper->ConvertResultToJsonValue(manager, &json_element); + found_elements->append(json_element); delete get_element_script_wrapper; } } diff --git a/cpp/IEDriver/FindByXPathElementFinder.h b/cpp/IEDriver/FindByXPathElementFinder.h index f435b62cd0def..a3f71a3a4a7ca 100644 --- a/cpp/IEDriver/FindByXPathElementFinder.h +++ b/cpp/IEDriver/FindByXPathElementFinder.h @@ -8,16 +8,21 @@ namespace webdriver { class FindByXPathElementFinder : public ElementFinder { public: - FindByXPathElementFinder(void) { + FindByXPathElementFinder(std::wstring locator) : ElementFinder(locator) { } virtual ~FindByXPathElementFinder(void) { } -protected: - int FindByXPathElementFinder::FindElementInternal(BrowserWrapper *browser, IHTMLElement *parent_element, std::wstring criteria, IHTMLElement **found_element) { + int FindByXPathElementFinder::FindElement(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, Json::Value *found_element) { int result = ENOSUCHELEMENT; + BrowserWrapper *browser; + result = manager->GetCurrentBrowser(&browser); + if (result != SUCCESS) { + return result; + } + result = this->InjectXPathEngine(browser); // TODO(simon): Why does the injecting sometimes fail? if (result != SUCCESS) { @@ -26,7 +31,7 @@ class FindByXPathElementFinder : public ElementFinder { // Call it std::wstring query; - if (parent_element) { + if (parent_wrapper) { query += L"(function() { return function(){var res = document.__webdriver_evaluate(arguments[0], arguments[1], null, 7, null); return res.snapshotItem(0) ;};})();"; } else { query += L"(function() { return function(){var res = document.__webdriver_evaluate(arguments[0], document, null, 7, null); return res.snapshotLength != 0 ? res.snapshotItem(0) : undefined ;};})();"; @@ -34,8 +39,8 @@ class FindByXPathElementFinder : public ElementFinder { ScriptWrapper *script_wrapper = new ScriptWrapper(query, 2); script_wrapper->AddArgument(criteria); - if (parent_element) { - CComPtr parent(parent_element); + if (parent_wrapper) { + CComPtr parent(parent_wrapper->element()); IHTMLElement* parent_element_copy; parent.CopyTo(&parent_element_copy); script_wrapper->AddArgument(parent_element_copy); @@ -43,10 +48,10 @@ class FindByXPathElementFinder : public ElementFinder { result = browser->ExecuteScript(script_wrapper); if (result == SUCCESS) { - if (script_wrapper->ResultIsEmpty()) { + if (!script_wrapper->ResultIsElement()) { result = ENOSUCHELEMENT; } else { - *found_element = (IHTMLElement*)script_wrapper->result().pdispVal; + result = script_wrapper->ConvertResultToJsonValue(manager, found_element); } } delete script_wrapper; @@ -54,10 +59,14 @@ class FindByXPathElementFinder : public ElementFinder { return result; } - int FindByXPathElementFinder::FindElementsInternal(BrowserWrapper *browser, IHTMLElement *parent_element, std::wstring criteria, std::vector *found_elements) - { + int FindByXPathElementFinder::FindElements(BrowserManager *manager, ElementWrapper *parent_wrapper, std::wstring criteria, Json::Value *found_elements) { int result = ENOSUCHELEMENT; + BrowserWrapper *browser; + result = manager->GetCurrentBrowser(&browser); + if (result != SUCCESS) { + return result; + } result = this->InjectXPathEngine(browser); // TODO(simon): Why does the injecting sometimes fail? if (result != SUCCESS) { @@ -66,7 +75,7 @@ class FindByXPathElementFinder : public ElementFinder { // Call it std::wstring query; - if (parent_element) { + if (parent_wrapper) { query += L"(function() { return function() {var res = document.__webdriver_evaluate(arguments[0], arguments[1], null, 7, null); return res;};})();"; } else { query += L"(function() { return function() {var res = document.__webdriver_evaluate(arguments[0], document, null, 7, null); return res;};})();"; @@ -74,9 +83,9 @@ class FindByXPathElementFinder : public ElementFinder { ScriptWrapper *script_wrapper = new ScriptWrapper(query, 2); script_wrapper->AddArgument(criteria); - if (parent_element) { + if (parent_wrapper) { // Use a copy for the parent element? - CComPtr parent(parent_element); + CComPtr parent(parent_wrapper->element()); IHTMLElement* parent_element_copy; parent.CopyTo(&parent_element_copy); script_wrapper->AddArgument(parent_element_copy); @@ -100,8 +109,9 @@ class FindByXPathElementFinder : public ElementFinder { get_element_script_wrapper->AddArgument(snapshot); get_element_script_wrapper->AddArgument(i); result = browser->ExecuteScript(get_element_script_wrapper); - IHTMLElement *found_element = (IHTMLElement *)get_element_script_wrapper->result().pdispVal; - found_elements->push_back(found_element); + Json::Value json_element; + get_element_script_wrapper->ConvertResultToJsonValue(manager, &json_element); + found_elements->append(json_element); delete get_element_script_wrapper; } } diff --git a/cpp/IEDriver/FindChildElementCommandHandler.h b/cpp/IEDriver/FindChildElementCommandHandler.h index 4ede62685f93a..1b3283028a17b 100644 --- a/cpp/IEDriver/FindChildElementCommandHandler.h +++ b/cpp/IEDriver/FindChildElementCommandHandler.h @@ -42,7 +42,7 @@ class FindChildElementCommandHandler : public WebDriverCommandHandler { status_code = this->GetElement(manager, element_id, &parent_element_wrapper); if (status_code == SUCCESS) { - ElementWrapper *found_element; + Json::Value found_element; int timeout(manager->implicit_wait_timeout()); clock_t end = clock() + (timeout / 1000 * CLOCKS_PER_SEC); @@ -59,7 +59,7 @@ class FindChildElementCommandHandler : public WebDriverCommandHandler { } while (clock() < end); if (status_code == SUCCESS) { - response->SetResponse(SUCCESS, found_element->ConvertToJson()); + response->SetResponse(SUCCESS, found_element); return; } else { response->SetErrorResponse(status_code, "Unable to find element with " + command_parameters["using"].asString() + " == " + command_parameters["value"].asString()); diff --git a/cpp/IEDriver/FindChildElementsCommandHandler.h b/cpp/IEDriver/FindChildElementsCommandHandler.h index 6c17997555384..73f671b67031a 100644 --- a/cpp/IEDriver/FindChildElementsCommandHandler.h +++ b/cpp/IEDriver/FindChildElementsCommandHandler.h @@ -42,7 +42,7 @@ class FindChildElementsCommandHandler : public WebDriverCommandHandler { status_code = this->GetElement(manager, element_id, &parent_element_wrapper); if (status_code == SUCCESS) { - std::vector found_elements; + Json::Value found_elements(Json::arrayValue); int timeout(manager->implicit_wait_timeout()); clock_t end = clock() + (timeout / 1000 * CLOCKS_PER_SEC); @@ -59,12 +59,7 @@ class FindChildElementsCommandHandler : public WebDriverCommandHandler { } while (clock() < end); if (status_code == SUCCESS) { - Json::Value element_array(Json::arrayValue); - for (unsigned int i = 0; i < found_elements.size(); ++i) { - element_array[i] = found_elements[i]->ConvertToJson(); - } - - response->SetResponse(SUCCESS, element_array); + response->SetResponse(SUCCESS, found_elements); return; } } else { diff --git a/cpp/IEDriver/FindElementCommandHandler.h b/cpp/IEDriver/FindElementCommandHandler.h index cc57790bb21b7..3542cc53e39bc 100644 --- a/cpp/IEDriver/FindElementCommandHandler.h +++ b/cpp/IEDriver/FindElementCommandHandler.h @@ -23,7 +23,6 @@ class FindElementCommandHandler : public WebDriverCommandHandler { response->SetErrorResponse(400, "Missing parameter: value"); return; } else { - ElementWrapper *found_element; std::wstring mechanism = CA2W(command_parameters["using"].asString().c_str(), CP_UTF8); std::wstring value = CA2W(command_parameters["value"].asString().c_str(), CP_UTF8); @@ -40,6 +39,7 @@ class FindElementCommandHandler : public WebDriverCommandHandler { end += 1 * CLOCKS_PER_SEC; } + Json::Value found_element; do { status_code = finder->FindElement(manager, NULL, value, &found_element); if (status_code == SUCCESS) { @@ -48,7 +48,7 @@ class FindElementCommandHandler : public WebDriverCommandHandler { } while (clock() < end); if (status_code == SUCCESS) { - response->SetResponse(SUCCESS, found_element->ConvertToJson()); + response->SetResponse(SUCCESS, found_element); return; } else { response->SetErrorResponse(status_code, "Unable to find element with " + command_parameters["using"].asString() + " == " + command_parameters["value"].asString()); diff --git a/cpp/IEDriver/FindElementsCommandHandler.h b/cpp/IEDriver/FindElementsCommandHandler.h index 13e7ed5400397..70e3eb7f1325c 100644 --- a/cpp/IEDriver/FindElementsCommandHandler.h +++ b/cpp/IEDriver/FindElementsCommandHandler.h @@ -23,7 +23,6 @@ class FindElementsCommandHandler : public WebDriverCommandHandler { response->SetErrorResponse(400, "Missing parameter: value"); return; } else { - std::vector found_elements; std::wstring mechanism = CA2W(command_parameters["using"].asString().c_str(), CP_UTF8); std::wstring value = CA2W(command_parameters["value"].asString().c_str(), CP_UTF8); @@ -40,20 +39,18 @@ class FindElementsCommandHandler : public WebDriverCommandHandler { end += 1 * CLOCKS_PER_SEC; } + Json::Value found_elements(Json::arrayValue); do { status_code = finder->FindElements(manager, NULL, value, &found_elements); if (status_code == SUCCESS && found_elements.size() > 0) { break; + } else { + ::Sleep(100); } } while (clock() < end); if (status_code == SUCCESS) { - Json::Value element_array(Json::arrayValue); - for (unsigned int i = 0; i < found_elements.size(); ++i) { - element_array[i] = found_elements[i]->ConvertToJson(); - } - - response->SetResponse(SUCCESS, element_array); + response->SetResponse(SUCCESS, found_elements); return; } } diff --git a/cpp/IEDriver/IEDriver.vcproj b/cpp/IEDriver/IEDriver.vcproj index 3dc80030821fd..1d04128afa6c2 100644 --- a/cpp/IEDriver/IEDriver.vcproj +++ b/cpp/IEDriver/IEDriver.vcproj @@ -524,34 +524,10 @@ RelativePath=".\ExecuteScriptCommandHandler.h" > - - - - - - - - - - - - diff --git a/cpp/IEDriver/ScriptWrapper.cpp b/cpp/IEDriver/ScriptWrapper.cpp index 5dc30b109f961..b352c11fbdd2c 100644 --- a/cpp/IEDriver/ScriptWrapper.cpp +++ b/cpp/IEDriver/ScriptWrapper.cpp @@ -114,8 +114,12 @@ bool ScriptWrapper::ResultIsArray() { // see if this object has a length attribute. This does not seem necessary // now. // (For future reference, GUID is {C59C6B12-F6C1-11CF-8835-00A0C911E8B2}) + // + // If the name is DispStaticNodeList, we can be pretty sure it's an array + // (or at least has array semantics). It is unclear to what extent checking + // for DispStaticNodeList is supported behaviour. typeinfo->ReleaseTypeAttr(type_attr); - if (name == L"JScriptTypeInfo") { + if (name == L"JScriptTypeInfo" || name == L"DispStaticNodeList") { return true; } } diff --git a/cpp/IEDriver/atoms.h b/cpp/IEDriver/atoms.h index 2ca2cec37b84c..0dddca05ffc03 100644 --- a/cpp/IEDriver/atoms.h +++ b/cpp/IEDriver/atoms.h @@ -256,5 +256,441 @@ const wchar_t* const GET_TEXT[] = { L";}", NULL }; + +const wchar_t* const FIND_ELEMENT[] = { + L"function(){var j=this;\nfunction k(a){var b=typeof a;if(b==\"object\")i", + L"f(a){if(a instanceof Array||!(a instanceof Object)&&Object.prototype.to", + L"String.call(a)==\"[object Array]\"||typeof a.length==\"number\"&&typeof", + L" a.splice!=\"undefined\"&&typeof a.propertyIsEnumerable!=\"undefined\"&", + L"&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(!(a instanceof ", + L"Object)&&(Object.prototype.toString.call(a)==\"[object Function]\"||typ", + L"eof a.call!=\"undefined\"&&typeof a.propertyIsEnumerable!=\"undefined\"", + L"&&!a.propertyIsEnumerable(\"call\")))return\"function\"}else return\"nu", + L"ll\";else if(b==\n\"function\"&&typeof a.call==\"undefined\")return\"ob", + L"ject\";return b}function l(a){var b=k(a);return b==\"array\"||b==\"obje", + L"ct\"&&typeof a.length==\"number\"}function o(a){return typeof a==\"stri", + L"ng\"}function p(a){return k(a)==\"function\"}function aa(a){a=k(a);retu", + L"rn a==\"object\"||a==\"array\"||a==\"function\"}function q(a,b){functio", + L"n c(){}c.prototype=b.prototype;a.m=b.prototype;a.prototype=new c};funct", + L"ion r(a){this.stack=Error().stack||\"\";if(a)this.message=String(a)}q(r", + L",Error);r.prototype.name=\"CustomError\";function ba(a){for(var b=1;bb)return 1;return 0};function u(a,b){b.unshift(a);r.call(th", + L"is,ba.apply(null,b));b.shift();this.n=a}q(u,r);u.prototype.name=\"Asser", + L"tionError\";function v(a,b){if(!a){var c=Array.prototype.slice.call(arg", + L"uments,2),d=\"Assertion failed\";if(b){d+=\": \"+b;var e=c}throw new u(", + L"\"\"+d,e||[]);}return a};var w=Array.prototype,x=w.indexOf?function(a,b", + L",c){v(a.length!=null);return w.indexOf.call(a,b,c)}:function(a,b,c){c=c", + L"==null?0:c<0?Math.max(0,a.length+c):c;if(o(a)){if(!o(b)||b.length!=1)re", + L"turn-1;return a.indexOf(b,c)}for(c=c;cparseFl", + L"oat(G)){na=String(qa);break a}}na=G}var sa={};\nfunction I(a){var b;if(", + L"!(b=sa[a])){b=0;var c=s(String(na)).split(\".\"),d=s(String(a)).split(", + L"\".\"),e=Math.max(c.length,d.length);for(var f=0;b==0&&f=0}ret", + L"urn b};var ta;!F||I(\"9\");F&&I(\"9\");function J(a,b){this.width=a;thi", + L"s.height=b}J.prototype.toString=function(){return\"(\"+this.width+\" x ", + L"\"+this.height+\")\"};function K(a){return a?new ua(L(a)):ta||(ta=new u", + L"a)}function va(a,b){if(a.contains&&b.nodeType==1)return a==b||a.contain", + L"s(b);if(typeof a.compareDocumentPosition!=\"undefined\")return a==b||Bo", + L"olean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;ret", + L"urn b==a}function L(a){return a.nodeType==9?a:a.ownerDocument||a.docume", + L"nt}function wa(a,b){var c=[];return xa(a,b,c,true)?c[0]:undefined}\nfun", + L"ction xa(a,b,c,d){if(a!=null){var e=0;for(var f;f=a.childNodes[e];e++){", + L"if(b(f)){c.push(f);if(d)return true}if(xa(f,b,c,d))return true}}return ", + L"false}function ya(a,b,c,d){if(!c)a=a.parentNode;c=d==null;for(var e=0;a", + L"&&(c||e<=d);){if(b(a))return a;a=a.parentNode;e++}return null}function ", + L"ua(a){this.h=a||j.document||document}\nfunction M(a,b,c,d){a=d||a.h;b=b", + L"&&b!=\"*\"?b.toUpperCase():\"\";if(a.querySelectorAll&&a.querySelector&", + L"&(!ma||document.compatMode==\"CSS1Compat\"||I(\"528\"))&&(b||c))c=a.que", + L"rySelectorAll(b+(c?\".\"+c:\"\"));else if(c&&a.getElementsByClassName){", + L"a=a.getElementsByClassName(c);if(b){d={};var e=0,f=0;for(var g;g=a[f];f", + L"++)if(b==g.nodeName)d[e++]=g;d.length=e;c=d}else c=a}else{a=a.getElemen", + L"tsByTagName(b||\"*\");if(c){d={};e=0;for(f=0;g=a[f];f++){b=g.className;", + L"if(typeof b.split==\"function\"&&x(b.split(/\\s+/),c)>=0)d[e++]=\ng}d.l", + L"ength=e;c=d}else c=a}return c}ua.prototype.contains=va;var za={};za.b=f", + L"unction(a,b){if(!a)throw Error(\"No class name specified\");a=s(a);if(a", + L".split(/\\s+/).length>1)throw Error(\"Compound class names not permitte", + L"d\");var c=M(K(b),\"*\",a,b);return c.length?c[0]:null};za.e=function(a", + L",b){if(!a)throw Error(\"No class name specified\");a=s(a);if(a.split(/", + L"\\s+/).length>1)throw Error(\"Compound class names not permitted\");ret", + L"urn M(K(b),\"*\",a,b)};var Aa={};Aa.b=function(a,b){if(!p(b.querySelect", + L"or)&&F&&I(8)&&!aa(b.querySelector))throw Error(\"CSS selection is not s", + L"upported\");if(!a)throw Error(\"No selector specified\");if(a.split(/,/", + L").length>1)throw Error(\"Compound selectors not permitted\");a=s(a);var", + L" c=b.querySelector(a);return c&&c.nodeType==1?c:null};\nAa.e=function(a", + L",b){if(!p(b.querySelectorAll)&&F&&I(8)&&!aa(b.querySelector))throw Erro", + L"r(\"CSS selection is not supported\");if(!a)throw Error(\"No selector s", + L"pecified\");if(a.split(/,/).length>1)throw Error(\"Compound selectors n", + L"ot permitted\");a=s(a);return b.querySelectorAll(a)};var Ba={};Ba.b=fun", + L"ction(a,b){var c=K(b),d=o(a)?c.h.getElementById(a):a;if(!d)return null;", + L"if(d.id==a&&va(b,d))return d;c=M(c,\"*\");return A(c,function(e){return", + L" e.id==a&&va(b,e)})};Ba.e=function(a,b){var c=M(K(b),\"*\",null,b);retu", + L"rn z(c,function(d){return d.id==a})};function Ca(a,b){if(typeof a.selec", + L"tNodes!=\"undefined\"){var c=L(a);typeof c.setProperty!=\"undefined\"&&", + L"c.setProperty(\"SelectionLanguage\",\"XPath\");return a.selectNodes(b)}", + L"else if(document.implementation.hasFeature(\"XPath\",\"3.0\")){c=L(a);v", + L"ar d=c.createNSResolver(c.documentElement);c=c.evaluate(b,a,d,XPathResu", + L"lt.ORDERED_NODE_SNAPSHOT_TYPE,null);d=[];var e=c.snapshotLength;for(var", + L" f=0;f=", + L"a.length)throw O;if(b in a)return a[b++];else b++}};return c}throw Erro", + L"r(\"Not implemented\");}\nfunction Ea(a,b,c){if(l(a))try{y(a,b,c)}catch", + L"(d){if(d!==O)throw d;}else{a=Da(a);try{for(;;)b.call(c,a.next(),undefin", + L"ed,a)}catch(e){if(e!==O)throw e;}}}function Fa(a){if(l(a))return fa(a);", + L"a=Da(a);var b=[];Ea(a,function(c){b.push(c)});return b};function Q(a,b,", + L"c,d,e){this.a=!!b;a&&R(this,a,d);this.f=e!=undefined?e:this.d||0;if(thi", + L"s.a)this.f*=-1;this.l=!c}q(Q,P);Q.prototype.c=null;Q.prototype.d=0;Q.pr", + L"ototype.k=false;function R(a,b,c,d){if(a.c=b)a.d=typeof c==\"number\"?c", + L":a.c.nodeType!=1?0:a.a?-1:1;if(typeof d==\"number\")a.f=d}\nQ.prototype", + L".next=function(){var a;if(this.k){if(!this.c||this.l&&this.f==0)throw O", + L";a=this.c;var b=this.a?-1:1;if(this.d==b){var c=this.a?a.lastChild:a.fi", + L"rstChild;c?R(this,c):R(this,a,b*-1)}else(c=this.a?a.previousSibling:a.n", + L"extSibling)?R(this,c):R(this,a.parentNode,b*-1);this.f+=this.d*(this.a?", + L"-1:1)}else this.k=true;a=this.c;if(!this.c)throw O;return a};\nQ.protot", + L"ype.splice=function(){var a=this.c,b=this.a?1:-1;if(this.d==b){this.d=b", + L"*-1;this.f+=this.d*(this.a?-1:1)}this.a=!this.a;Q.prototype.next.call(t", + L"his);this.a=!this.a;b=l(arguments[0])?arguments[0]:arguments;for(var c=", + L"b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.next", + L"Sibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function S(a,b,c", + L",d){Q.call(this,a,b,c,null,d)}q(S,Q);S.prototype.next=function(){do S.m", + L".next.call(this);while(this.d==-1);return this.c};function Ga(a,b){var ", + L"c=L(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultV", + L"iew.getComputedStyle(a,null))return c[b]||c.getPropertyValue(b);return", + L"\"\"}var Ha={};function Ia(a){return Ha[a]||(Ha[a]=String(a).replace(/", + L"\\-([a-z])/g,function(b,c){return c.toUpperCase()}))};function T(a,b){r", + L"eturn!!a&&a.nodeType==1&&(!b||a.tagName.toUpperCase()==b)}\nvar Ja=[\"a", + L"sync\",\"autofocus\",\"autoplay\",\"checked\",\"compact\",\"complete\",", + L"\"controls\",\"declare\",\"defaultchecked\",\"defaultselected\",\"defer", + L"\",\"disabled\",\"draggable\",\"ended\",\"formnovalidate\",\"hidden\",", + L"\"indeterminate\",\"iscontenteditable\",\"ismap\",\"itemscope\",\"loop", + L"\",\"multiple\",\"muted\",\"nohref\",\"noresize\",\"noshade\",\"novalid", + L"ate\",\"nowrap\",\"open\",\"paused\",\"pubdate\",\"readonly\",\"require", + L"d\",\"reversed\",\"scoped\",\"seamless\",\"seeking\",\"selected\",\"spe", + L"llcheck\",\"truespeed\",\"willvalidate\"];\nfunction Ka(a,b){if(8==a.no", + L"deType)return null;b=b.toLowerCase();if(b==\"style\"){var c=s(a.style.c", + L"ssText).toLowerCase();return c.charAt(c.length-1)==\";\"?c:c+\";\"}c=a.", + L"getAttributeNode(b);if(F)if(!c&&I(8)&&x(Ja,b)>=0)c=a[b];if(!c)return nu", + L"ll;if(x(Ja,b)>=0)return F&&c.value==\"false\"?null:\"true\";return c.sp", + L"ecified?c.value:null}function U(a){for(a=a.parentNode;a&&a.nodeType!=1&", + L"&a.nodeType!=9&&a.nodeType!=11;)a=a.parentNode;return T(a)?a:null}funct", + L"ion V(a,b){b=Ia(b);return Ga(a,b)||La(a,b)}\nfunction La(a,b){var c=(a.", + L"currentStyle||a.style)[b];if(c!=\"inherit\")return c!==undefined?c:null", + L";return(c=U(a))?La(c,b):null}\nfunction Ma(a){if(p(a.getBBox))return a.", + L"getBBox();var b;var c=ka&&!I(\"10\");if((Ga(a,\"display\")||(a.currentS", + L"tyle?a.currentStyle.display:null)||a.style.display)!=\"none\")b=c?new J", + L"(a.offsetWidth||a.clientWidth,a.offsetHeight||a.clientHeight):new J(a.o", + L"ffsetWidth,a.offsetHeight);else{b=a.style;var d=b.display,e=b.visibilit", + L"y,f=b.position;b.visibility=\"hidden\";b.position=\"absolute\";b.displa", + L"y=\"inline\";if(c){c=a.offsetWidth||a.clientWidth;a=a.offsetHeight||a.c", + L"lientHeight}else{c=a.offsetWidth;a=a.offsetHeight}b.display=\nd;b.posit", + L"ion=f;b.visibility=e;b=new J(c,a)}return b}\nfunction W(a){function b(e", + L"){if(V(e,\"display\")==\"none\")return false;e=U(e);return!e||b(e)}func", + L"tion c(e){var f=Ma(e);if(f.height>0&&f.width>0)return true;return ma&&d", + L"a(e.childNodes,function(g){return T(g)&&c(g)})}if(!T(a))throw Error(\"A", + L"rgument to isShown must be of type Element\");if(T(a,\"OPTION\")||T(a,", + L"\"OPTGROUP\")){var d=ya(a,function(e){return T(e,\"SELECT\")});return!!", + L"d&&W(d)}if(T(a,\"MAP\")){if(!a.name)return false;d=L(a);d=d.evaluate?N.", + L"b('/descendant::*[@usemap = \"#'+a.name+'\"]',d):wa(d,function(e){retur", + L"n T(e)&&\nKa(e,\"usemap\")==\"#\"+a.name});return!!d&&W(d)}if(T(a,\"ARE", + L"A\")){d=ya(a,function(e){return T(e,\"MAP\")});return!!d&&W(d)}if(T(a,", + L"\"INPUT\")&&a.type.toLowerCase()==\"hidden\")return false;if(V(a,\"visi", + L"bility\")==\"hidden\")return false;if(!b(a))return false;if(Na(a)==0)re", + L"turn false;if(!c(a))return false;return true}\nfunction Oa(a){var b=\"", + L"\",c=Pa(a),d=RegExp(String.fromCharCode(160)+\"$\",\"gm\"),e=RegExp(\"^", + L"\"+String.fromCharCode(160),\"gm\"),f=false;y(c,function(g,m){if(g.node", + L"Type==3){var h;if(g.nodeType!=3)throw Error(\"Cannot extract text from ", + L"a node whose type is not #text\");if(ca(g.nodeValue)==\" \")h=\" \";els", + L"e if((h=U(g))&&W(h)){h=g.nodeValue;h=h.replace(RegExp(String.fromCharCo", + L"de(160),\"gm\"),\" \");h=h=ca(h)}else h=\"\";h=s(h);if(h.length){var i;", + L"a:{for(i=m-1;i>=0;i--){var n=c[i];if(n.nodeType!=3){if(T(n,\"BR\"))i=tr", + L"ue;else if(T(n)){i=\nV(n,\"display\");i=i==\"block\"||i==\"inline-block", + L"\"}else i=false;break a}}i=false}if(i)h=\"\\n\"+h;else if(m!=0){i=g.nod", + L"eValue.match(/^\\s/)||g.nodeValue.match(e);if(f||i)h=\" \"+h}}f=g.nodeV", + L"alue.match(/\\s$/)||g.nodeValue.match(d);b+=h}});return b=s(b.replace(/", + L" +/g,\" \"))}function Pa(a){a=new S(a);try{a.next();return Fa(a)}catch(", + L"b){}return[]}\nfunction Na(a){if(F){if(V(a,\"position\")==\"relative\")", + L"return 1;a=V(a,\"filter\");return(a=a.match(/^alpha\\(opacity=(\\d*)\\)", + L"/)||a.match(/^progid:DXImageTransform.Microsoft.Alpha\\(Opacity=(\\d*)", + L"\\)/))?Number(a[1])/100:1}else return Qa(a)}function Qa(a){var b=1,c=V(", + L"a,\"opacity\");if(c)b=Number(c);if(a=U(a))b*=Qa(a);return b};var X={},R", + L"a={};X.j=function(a,b,c){b=M(K(b),\"A\",null,b);return A(b,function(d){", + L"d=Oa(d);return c&&d.indexOf(a)!=-1||d==a})};X.i=function(a,b,c){b=M(K(b", + L"),\"A\",null,b);return z(b,function(d){d=Oa(d);return c&&d.indexOf(a)!=", + L"-1||d==a})};X.b=function(a,b){return X.j(a,b,false)};X.e=function(a,b){", + L"return X.i(a,b,false)};Ra.b=function(a,b){return X.j(a,b,true)};Ra.e=fu", + L"nction(a,b){return X.i(a,b,true)};var Sa={};Sa.b=function(a,b){var c=M(", + L"K(b),\"*\",null,b);return A(c,function(d){return d.getAttribute(\"name", + L"\")==a||d.name==a})};Sa.e=function(a,b){var c=M(K(b),\"*\",null,b);retu", + L"rn z(c,function(d){return d.getAttribute(\"name\")==a||d.name==a})};var", + L" Ta={};Ta.b=function(a,b){return M(K(b),a,null,b)[0]||null};Ta.e=functi", + L"on(a,b){return M(K(b),a,null,b)};var Ua={className:za,css:Aa,id:Ba,link", + L"Text:X,name:Sa,partialLinkText:Ra,tagName:Ta,xpath:N};function Va(a,b){", + L"var c;a:{for(c in a){c=c;break a}c=void 0}if(c){var d=Ua[c];if(d&&p(d.b", + L"))return d.b(a[c],b||L(j))}throw Error(\"Unsupported locator strategy: ", + L"\"+c);}var Y=\"_\".split(\".\"),Z=j;!(Y[0]in Z)&&Z.execScript&&Z.execSc", + L"ript(\"var \"+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&Va", + L"!==undefined)Z[$]=Va;else Z=Z[$]?Z[$]:Z[$]={};; return _.apply(null,arg", + L"uments);}", + NULL +}; + +const wchar_t* const FIND_ELEMENTS[] = { + L"function(){var j=this;\nfunction k(a){var b=typeof a;if(b==\"object\")i", + L"f(a){if(a instanceof Array||!(a instanceof Object)&&Object.prototype.to", + L"String.call(a)==\"[object Array]\"||typeof a.length==\"number\"&&typeof", + L" a.splice!=\"undefined\"&&typeof a.propertyIsEnumerable!=\"undefined\"&", + L"&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(!(a instanceof ", + L"Object)&&(Object.prototype.toString.call(a)==\"[object Function]\"||typ", + L"eof a.call!=\"undefined\"&&typeof a.propertyIsEnumerable!=\"undefined\"", + L"&&!a.propertyIsEnumerable(\"call\")))return\"function\"}else return\"nu", + L"ll\";else if(b==\n\"function\"&&typeof a.call==\"undefined\")return\"ob", + L"ject\";return b}function l(a){var b=k(a);return b==\"array\"||b==\"obje", + L"ct\"&&typeof a.length==\"number\"}function o(a){return typeof a==\"stri", + L"ng\"}function p(a){return k(a)==\"function\"}function aa(a){a=k(a);retu", + L"rn a==\"object\"||a==\"array\"||a==\"function\"}function q(a,b){functio", + L"n c(){}c.prototype=b.prototype;a.m=b.prototype;a.prototype=new c};funct", + L"ion r(a){this.stack=Error().stack||\"\";if(a)this.message=String(a)}q(r", + L",Error);r.prototype.name=\"CustomError\";function ba(a){for(var b=1;bb)return 1;return 0};function u(a,b){b.unshift(a);r.call(th", + L"is,ba.apply(null,b));b.shift();this.n=a}q(u,r);u.prototype.name=\"Asser", + L"tionError\";function v(a,b){if(!a){var c=Array.prototype.slice.call(arg", + L"uments,2),d=\"Assertion failed\";if(b){d+=\": \"+b;var e=c}throw new u(", + L"\"\"+d,e||[]);}return a};var w=Array.prototype,x=w.indexOf?function(a,b", + L",c){v(a.length!=null);return w.indexOf.call(a,b,c)}:function(a,b,c){c=c", + L"==null?0:c<0?Math.max(0,a.length+c):c;if(o(a)){if(!o(b)||b.length!=1)re", + L"turn-1;return a.indexOf(b,c)}for(c=c;cparseFl", + L"oat(G)){na=String(qa);break a}}na=G}var sa={};\nfunction I(a){var b;if(", + L"!(b=sa[a])){b=0;var c=s(String(na)).split(\".\"),d=s(String(a)).split(", + L"\".\"),e=Math.max(c.length,d.length);for(var f=0;b==0&&f=0}ret", + L"urn b};var ta;!F||I(\"9\");F&&I(\"9\");function J(a,b){this.width=a;thi", + L"s.height=b}J.prototype.toString=function(){return\"(\"+this.width+\" x ", + L"\"+this.height+\")\"};function K(a){return a?new ua(L(a)):ta||(ta=new u", + L"a)}function va(a,b){if(a.contains&&b.nodeType==1)return a==b||a.contain", + L"s(b);if(typeof a.compareDocumentPosition!=\"undefined\")return a==b||Bo", + L"olean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;ret", + L"urn b==a}function L(a){return a.nodeType==9?a:a.ownerDocument||a.docume", + L"nt}function wa(a,b){var c=[];return xa(a,b,c,true)?c[0]:undefined}\nfun", + L"ction xa(a,b,c,d){if(a!=null){var e=0;for(var f;f=a.childNodes[e];e++){", + L"if(b(f)){c.push(f);if(d)return true}if(xa(f,b,c,d))return true}}return ", + L"false}function ya(a,b,c,d){if(!c)a=a.parentNode;c=d==null;for(var e=0;a", + L"&&(c||e<=d);){if(b(a))return a;a=a.parentNode;e++}return null}function ", + L"ua(a){this.h=a||j.document||document}\nfunction M(a,b,c,d){a=d||a.h;b=b", + L"&&b!=\"*\"?b.toUpperCase():\"\";if(a.querySelectorAll&&a.querySelector&", + L"&(!ma||document.compatMode==\"CSS1Compat\"||I(\"528\"))&&(b||c))c=a.que", + L"rySelectorAll(b+(c?\".\"+c:\"\"));else if(c&&a.getElementsByClassName){", + L"a=a.getElementsByClassName(c);if(b){d={};var e=0,f=0;for(var g;g=a[f];f", + L"++)if(b==g.nodeName)d[e++]=g;d.length=e;c=d}else c=a}else{a=a.getElemen", + L"tsByTagName(b||\"*\");if(c){d={};e=0;for(f=0;g=a[f];f++){b=g.className;", + L"if(typeof b.split==\"function\"&&x(b.split(/\\s+/),c)>=0)d[e++]=\ng}d.l", + L"ength=e;c=d}else c=a}return c}ua.prototype.contains=va;var za={};za.d=f", + L"unction(a,b){if(!a)throw Error(\"No class name specified\");a=s(a);if(a", + L".split(/\\s+/).length>1)throw Error(\"Compound class names not permitte", + L"d\");var c=M(K(b),\"*\",a,b);return c.length?c[0]:null};za.b=function(a", + L",b){if(!a)throw Error(\"No class name specified\");a=s(a);if(a.split(/", + L"\\s+/).length>1)throw Error(\"Compound class names not permitted\");ret", + L"urn M(K(b),\"*\",a,b)};var Aa={};Aa.d=function(a,b){if(!p(b.querySelect", + L"or)&&F&&I(8)&&!aa(b.querySelector))throw Error(\"CSS selection is not s", + L"upported\");if(!a)throw Error(\"No selector specified\");if(a.split(/,/", + L").length>1)throw Error(\"Compound selectors not permitted\");a=s(a);var", + L" c=b.querySelector(a);return c&&c.nodeType==1?c:null};\nAa.b=function(a", + L",b){if(!p(b.querySelectorAll)&&F&&I(8)&&!aa(b.querySelector))throw Erro", + L"r(\"CSS selection is not supported\");if(!a)throw Error(\"No selector s", + L"pecified\");if(a.split(/,/).length>1)throw Error(\"Compound selectors n", + L"ot permitted\");a=s(a);return b.querySelectorAll(a)};var Ba={};Ba.d=fun", + L"ction(a,b){var c=K(b),d=o(a)?c.h.getElementById(a):a;if(!d)return null;", + L"if(d.id==a&&va(b,d))return d;c=M(c,\"*\");return A(c,function(e){return", + L" e.id==a&&va(b,e)})};Ba.b=function(a,b){var c=M(K(b),\"*\",null,b);retu", + L"rn z(c,function(d){return d.id==a})};function Ca(a,b){if(typeof a.selec", + L"tNodes!=\"undefined\"){var c=L(a);typeof c.setProperty!=\"undefined\"&&", + L"c.setProperty(\"SelectionLanguage\",\"XPath\");return a.selectNodes(b)}", + L"else if(document.implementation.hasFeature(\"XPath\",\"3.0\")){c=L(a);v", + L"ar d=c.createNSResolver(c.documentElement);c=c.evaluate(b,a,d,XPathResu", + L"lt.ORDERED_NODE_SNAPSHOT_TYPE,null);d=[];var e=c.snapshotLength;for(var", + L" f=0;f=", + L"a.length)throw O;if(b in a)return a[b++];else b++}};return c}throw Erro", + L"r(\"Not implemented\");}\nfunction Ea(a,b,c){if(l(a))try{y(a,b,c)}catch", + L"(d){if(d!==O)throw d;}else{a=Da(a);try{for(;;)b.call(c,a.next(),undefin", + L"ed,a)}catch(e){if(e!==O)throw e;}}}function Fa(a){if(l(a))return fa(a);", + L"a=Da(a);var b=[];Ea(a,function(c){b.push(c)});return b};function Q(a,b,", + L"c,d,e){this.a=!!b;a&&R(this,a,d);this.f=e!=undefined?e:this.e||0;if(thi", + L"s.a)this.f*=-1;this.l=!c}q(Q,P);Q.prototype.c=null;Q.prototype.e=0;Q.pr", + L"ototype.k=false;function R(a,b,c,d){if(a.c=b)a.e=typeof c==\"number\"?c", + L":a.c.nodeType!=1?0:a.a?-1:1;if(typeof d==\"number\")a.f=d}\nQ.prototype", + L".next=function(){var a;if(this.k){if(!this.c||this.l&&this.f==0)throw O", + L";a=this.c;var b=this.a?-1:1;if(this.e==b){var c=this.a?a.lastChild:a.fi", + L"rstChild;c?R(this,c):R(this,a,b*-1)}else(c=this.a?a.previousSibling:a.n", + L"extSibling)?R(this,c):R(this,a.parentNode,b*-1);this.f+=this.e*(this.a?", + L"-1:1)}else this.k=true;a=this.c;if(!this.c)throw O;return a};\nQ.protot", + L"ype.splice=function(){var a=this.c,b=this.a?1:-1;if(this.e==b){this.e=b", + L"*-1;this.f+=this.e*(this.a?-1:1)}this.a=!this.a;Q.prototype.next.call(t", + L"his);this.a=!this.a;b=l(arguments[0])?arguments[0]:arguments;for(var c=", + L"b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.next", + L"Sibling);a&&a.parentNode&&a.parentNode.removeChild(a)};function S(a,b,c", + L",d){Q.call(this,a,b,c,null,d)}q(S,Q);S.prototype.next=function(){do S.m", + L".next.call(this);while(this.e==-1);return this.c};function Ga(a,b){var ", + L"c=L(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultV", + L"iew.getComputedStyle(a,null))return c[b]||c.getPropertyValue(b);return", + L"\"\"}var Ha={};function Ia(a){return Ha[a]||(Ha[a]=String(a).replace(/", + L"\\-([a-z])/g,function(b,c){return c.toUpperCase()}))};function T(a,b){r", + L"eturn!!a&&a.nodeType==1&&(!b||a.tagName.toUpperCase()==b)}\nvar Ja=[\"a", + L"sync\",\"autofocus\",\"autoplay\",\"checked\",\"compact\",\"complete\",", + L"\"controls\",\"declare\",\"defaultchecked\",\"defaultselected\",\"defer", + L"\",\"disabled\",\"draggable\",\"ended\",\"formnovalidate\",\"hidden\",", + L"\"indeterminate\",\"iscontenteditable\",\"ismap\",\"itemscope\",\"loop", + L"\",\"multiple\",\"muted\",\"nohref\",\"noresize\",\"noshade\",\"novalid", + L"ate\",\"nowrap\",\"open\",\"paused\",\"pubdate\",\"readonly\",\"require", + L"d\",\"reversed\",\"scoped\",\"seamless\",\"seeking\",\"selected\",\"spe", + L"llcheck\",\"truespeed\",\"willvalidate\"];\nfunction Ka(a,b){if(8==a.no", + L"deType)return null;b=b.toLowerCase();if(b==\"style\"){var c=s(a.style.c", + L"ssText).toLowerCase();return c.charAt(c.length-1)==\";\"?c:c+\";\"}c=a.", + L"getAttributeNode(b);if(F)if(!c&&I(8)&&x(Ja,b)>=0)c=a[b];if(!c)return nu", + L"ll;if(x(Ja,b)>=0)return F&&c.value==\"false\"?null:\"true\";return c.sp", + L"ecified?c.value:null}function U(a){for(a=a.parentNode;a&&a.nodeType!=1&", + L"&a.nodeType!=9&&a.nodeType!=11;)a=a.parentNode;return T(a)?a:null}funct", + L"ion V(a,b){b=Ia(b);return Ga(a,b)||La(a,b)}\nfunction La(a,b){var c=(a.", + L"currentStyle||a.style)[b];if(c!=\"inherit\")return c!==undefined?c:null", + L";return(c=U(a))?La(c,b):null}\nfunction Ma(a){if(p(a.getBBox))return a.", + L"getBBox();var b;var c=ka&&!I(\"10\");if((Ga(a,\"display\")||(a.currentS", + L"tyle?a.currentStyle.display:null)||a.style.display)!=\"none\")b=c?new J", + L"(a.offsetWidth||a.clientWidth,a.offsetHeight||a.clientHeight):new J(a.o", + L"ffsetWidth,a.offsetHeight);else{b=a.style;var d=b.display,e=b.visibilit", + L"y,f=b.position;b.visibility=\"hidden\";b.position=\"absolute\";b.displa", + L"y=\"inline\";if(c){c=a.offsetWidth||a.clientWidth;a=a.offsetHeight||a.c", + L"lientHeight}else{c=a.offsetWidth;a=a.offsetHeight}b.display=\nd;b.posit", + L"ion=f;b.visibility=e;b=new J(c,a)}return b}\nfunction W(a){function b(e", + L"){if(V(e,\"display\")==\"none\")return false;e=U(e);return!e||b(e)}func", + L"tion c(e){var f=Ma(e);if(f.height>0&&f.width>0)return true;return ma&&d", + L"a(e.childNodes,function(g){return T(g)&&c(g)})}if(!T(a))throw Error(\"A", + L"rgument to isShown must be of type Element\");if(T(a,\"OPTION\")||T(a,", + L"\"OPTGROUP\")){var d=ya(a,function(e){return T(e,\"SELECT\")});return!!", + L"d&&W(d)}if(T(a,\"MAP\")){if(!a.name)return false;d=L(a);d=d.evaluate?N.", + L"d('/descendant::*[@usemap = \"#'+a.name+'\"]',d):wa(d,function(e){retur", + L"n T(e)&&\nKa(e,\"usemap\")==\"#\"+a.name});return!!d&&W(d)}if(T(a,\"ARE", + L"A\")){d=ya(a,function(e){return T(e,\"MAP\")});return!!d&&W(d)}if(T(a,", + L"\"INPUT\")&&a.type.toLowerCase()==\"hidden\")return false;if(V(a,\"visi", + L"bility\")==\"hidden\")return false;if(!b(a))return false;if(Na(a)==0)re", + L"turn false;if(!c(a))return false;return true}\nfunction Oa(a){var b=\"", + L"\",c=Pa(a),d=RegExp(String.fromCharCode(160)+\"$\",\"gm\"),e=RegExp(\"^", + L"\"+String.fromCharCode(160),\"gm\"),f=false;y(c,function(g,m){if(g.node", + L"Type==3){var h;if(g.nodeType!=3)throw Error(\"Cannot extract text from ", + L"a node whose type is not #text\");if(ca(g.nodeValue)==\" \")h=\" \";els", + L"e if((h=U(g))&&W(h)){h=g.nodeValue;h=h.replace(RegExp(String.fromCharCo", + L"de(160),\"gm\"),\" \");h=h=ca(h)}else h=\"\";h=s(h);if(h.length){var i;", + L"a:{for(i=m-1;i>=0;i--){var n=c[i];if(n.nodeType!=3){if(T(n,\"BR\"))i=tr", + L"ue;else if(T(n)){i=\nV(n,\"display\");i=i==\"block\"||i==\"inline-block", + L"\"}else i=false;break a}}i=false}if(i)h=\"\\n\"+h;else if(m!=0){i=g.nod", + L"eValue.match(/^\\s/)||g.nodeValue.match(e);if(f||i)h=\" \"+h}}f=g.nodeV", + L"alue.match(/\\s$/)||g.nodeValue.match(d);b+=h}});return b=s(b.replace(/", + L" +/g,\" \"))}function Pa(a){a=new S(a);try{a.next();return Fa(a)}catch(", + L"b){}return[]}\nfunction Na(a){if(F){if(V(a,\"position\")==\"relative\")", + L"return 1;a=V(a,\"filter\");return(a=a.match(/^alpha\\(opacity=(\\d*)\\)", + L"/)||a.match(/^progid:DXImageTransform.Microsoft.Alpha\\(Opacity=(\\d*)", + L"\\)/))?Number(a[1])/100:1}else return Qa(a)}function Qa(a){var b=1,c=V(", + L"a,\"opacity\");if(c)b=Number(c);if(a=U(a))b*=Qa(a);return b};var X={},R", + L"a={};X.j=function(a,b,c){b=M(K(b),\"A\",null,b);return A(b,function(d){", + L"d=Oa(d);return c&&d.indexOf(a)!=-1||d==a})};X.i=function(a,b,c){b=M(K(b", + L"),\"A\",null,b);return z(b,function(d){d=Oa(d);return c&&d.indexOf(a)!=", + L"-1||d==a})};X.d=function(a,b){return X.j(a,b,false)};X.b=function(a,b){", + L"return X.i(a,b,false)};Ra.d=function(a,b){return X.j(a,b,true)};Ra.b=fu", + L"nction(a,b){return X.i(a,b,true)};var Sa={};Sa.d=function(a,b){var c=M(", + L"K(b),\"*\",null,b);return A(c,function(d){return d.getAttribute(\"name", + L"\")==a||d.name==a})};Sa.b=function(a,b){var c=M(K(b),\"*\",null,b);retu", + L"rn z(c,function(d){return d.getAttribute(\"name\")==a||d.name==a})};var", + L" Ta={};Ta.d=function(a,b){return M(K(b),a,null,b)[0]||null};Ta.b=functi", + L"on(a,b){return M(K(b),a,null,b)};var Ua={className:za,css:Aa,id:Ba,link", + L"Text:X,name:Sa,partialLinkText:Ra,tagName:Ta,xpath:N};function Va(a,b){", + L"var c;a:{for(c in a){c=c;break a}c=void 0}if(c){var d=Ua[c];if(d&&p(d.b", + L"))return d.b(a[c],b||L(j))}throw Error(\"Unsupported locator strategy: ", + L"\"+c);}var Y=\"_\".split(\".\"),Z=j;!(Y[0]in Z)&&Z.execScript&&Z.execSc", + L"ript(\"var \"+Y[0]);for(var $;Y.length&&($=Y.shift());)if(!Y.length&&Va", + L"!==undefined)Z[$]=Va;else Z=Z[$]?Z[$]:Z[$]={};; return _.apply(null,arg", + L"uments);}", + NULL +}; } #endif // ATOMS_H__ diff --git a/jobbie/build.desc b/jobbie/build.desc index d7e0186137a29..683bb03abfbf9 100644 --- a/jobbie/build.desc +++ b/jobbie/build.desc @@ -3,6 +3,8 @@ js_fragment_header(name = "atoms", deps = [ "//common/src/js/webdriver:get_attribute", "//common/src/js/webdriver:get_text", + "//common/src/js/webdriver:find_element", + "//common/src/js/webdriver:find_elements", ], out = "cpp/IEDriver/atoms.h" )