Unable to invoke IE browser in selenium - c#

I'm using selenium but i m not able to use the IE browser when running tests using c#
The code i wrote
IWebDriver driver;
[TestFixtureSetUp]
public void setup()
{
driver = new InternetExplorerDriver(#"path of ie driver");
}
where i m doing wrong

Remove capability INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS and manually set your IE protected mode settings to be the same for all zones.
Source:
http://jimevansmusic.blogspot.com/2012/08/youre-doing-it-wrong-protected-mode-and.html
NoSuchElementException is occurred during implementation of InternetExplorerDriver in Selenium WebDriver

You need to configure the IE Security settings, more details on link https://code.google.com/p/selenium/wiki/InternetExplorerDriver
Also, another tip would be to use ONLY the 32-bit IEDriver (even on 64-bit machines) as the 64-bit driver is extremely slow.
Below is the extract:
The IEDriverServer exectuable must be downloaded and placed in your PATH.
On IE 7 or higher on Windows Vista or Windows 7, you must set the Protected Mode settings for each zone to be the same value. The value can be on or off, as long as it is the same for every zone. To set the Protected Mode settings, choose "Internet Options..." from the Tools menu, and click on the Security tab. For each zone, there will be a check box at the bottom of the tab labeled "Enable Protected Mode".
Additionally, "Enhanced Protected Mode" must be disabled for IE 10 and higher. This option is found in the Advanced tab of the Internet Options dialog.
The browser zoom level must be set to 100% so that the native mouse events can be set to the correct coordinates.
For IE 11 only, you will need to set a registry entry on the target computer so that the driver can maintain a connection to the instance of Internet Explorer it creates. For 32-bit Windows installations, the key you must examine in the registry editor is HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE. For 64-bit Windows installations, the key is HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE. Please note that the FEATURE_BFCACHE subkey may or may not be present, and should be created if it is not present. Important: Inside this key, create a DWORD value named iexplore.exe with the value of 0.

Related

Unable to hide "Chrome is being controlled by automated software" infobar within Chrome v76

After updating Chrome to version 76, I cannot figure out how to hide the "Chrome is being controlled by automated software..." notification overriding some controls on the page.
The latest stable release of ChromeDriver is indeed 76.0.3809.68.
The following code worked with Chrome 75 and ChromeDriver 74.
var options = new ChromeOptions();
options.AddArgument("--test-type");
options.AddArgument("--disable-extensions");
options.AddArguments("disable-infobars");
options.AddArguments("--disable-notifications");
options.AddArguments("enable-automation");
options.AddArguments("--disable-popup-blocking");
options.AddArguments("start-maximized");
var driver = new ChromeDriver(driverLocation, options, ScriptTimeout);
As of 1 Aug 2019 - You can send the excludeswitch - enable-automation to hide the message. and to disable pop up 'Disable developer mode extensions' set
useAutomationExtension=false . Refer for useAutomationExtension
Tested on : Windows 10
Version 76.0.3809.87 (Official Build) (64-bit)
ChromeDriver 76.0.3809.68
--enable-automation : Inform users that their browser is being controlled by an automated test Reference
"goog:chromeOptions": {
"excludeSwitches": [ "enable-automation" ],
"useAutomationExtension": false
}
In C# :
To disable pop up "Disable developer mode extensions" and automation info-bar message .
options.AddExcludedArgument("enable-automation");
options.AddAdditionalCapability("useAutomationExtension", false);
In JAVA :
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
In Python :
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
In Protractor :
Add below capabilities in conf.js/conf.ts
capabilities: {
'browserName': 'chrome',
"goog:chromeOptions": {
"excludeSwitches": [ "enable-automation" ],
"useAutomationExtension": false
}
},
Chromium team earlier introduced the infobar Chrome is being controlled by automated test software to disable Developer mode extension popup within Chrome Browser through this commit.
As per the discussion Flakiness due to Chrome automation infobar (Chrome 57+) with the addition of the infobar to display if a session is being controlled by an automated test within Chrome it was observed that the presence of Chrome automation infobar Chrome is being controlled by automated test software intermitently caused the click() function to fail. During the tests, when the the infobar was removed by passing disable-infobars within chrome_launcher.cc then the above tests runs as expected without any issues. gmanikpure#chromium.org confirmed that the culprit was the changelog:
Add an infobar if a session is being controlled by an automated test.
This infobar is only displayed if the browser is launched with the --enable-automation switch. It also disables the developer mode extensions warning bubble.
TEST=launch with and without --enable-automation, and check for presence of automation infobar
It was observed that, during a click the infobar animation occurs and we got flaky results. So Chromium team needed to detect this change somehow and recompute the position. The actual problem was, if a Page.frameResized occured we can invalidate the results of some operations and retry (e.g. get element position) but there were other operations that can modify the page, such as mouse clicks. It's possible that a mouse click (which involves a mousemove, mousedown and a mouseup event) can have a resize event in the middle.
Accordingly, Chromium team released a revision through this commit:
Disable info bar animations during automated testing.
Since then Chrome user, to disable the infobar started using:
Java:
options.addArguments("disable-infobars");
Python:
options.add_argument("disable-infobars")
C#:
option.AddArguments("disable-infobars");
Now in the discussion Chrome is being controlled by automated test software infobar doesn't gets suppressed despite using disable-infobars argument Chromium team member triciac#chromium.org clearly mentioned:
As of v 76, the ability to suppress the infobar was moved from command line options to Enterprise Policy settings for Chrome.
The change was already mentioned in the Release Notes and Chrome Enterprise release notes as follows
--disable-infobars is no longer supported
Chrome will no longer support the --disable-infobars flag, which was used to hide pop-up warnings
from Chrome Browser. To support automated testing, kiosks, and automation, the
CommandLineFlagSecurityWarningsEnabled policy was added to allow you to disable some security
warnings.
So, from Chrome v76.x onwards --disable-infobars flag is officially deprecated.
Conclusion
The policy is not an option or a capability that is set when ChromeDriver or Chrome is launched as security policies are typically managed by your corporate IT department. Hence usage of disable-infobars have been deprecated.
A small Hack
The --disable-infobars flag can still removed from Chrome v76.x using these 2(two) ExperimentalOption:
Excluding the switches for enable-automation
Setting useAutomationExtension to False
Implementations
Here are the implementations:
Java:
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");
Python:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get('https://www.google.co.in')
Outro
As per the article CommandLineFlagSecurityWarningsEnabled:
Enable security warnings for command-line flags
Supported on: Google Chrome (Linux, Mac, Windows) since version 76
Description: If disabled, prevents security warnings from appearing when Chrome is launched with some potentially dangerous command-line flags.
If enabled or unset, security warnings are displayed when some command-line flags are used to launch Chrome.
On Windows, this policy is only available on instances that are joined to a Microsoft Active Directory domain or Windows 10 Pro or Enterprise instances that are enrolled for device management.
This will work in C#:
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("--incognito");
chromeOptions.AddExcludedArgument("enable-automation");
chromeOptions.AddAdditionalCapability("useAutomationExtension", false);
To hide "Chrome is being controlled by automated test software" infobar in C# for Chrome v76:
var chromeOptions = new ChromeOptions();
...
chromeOptions.AddAdditionalCapability("useAutomationExtension", false);
chromeOptions.AddExcludedArgument("enable-automation");
...
var driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), chromeOptions, commandTimeout);
You can use --app=desired_address_without_brackets flag, e.g. --app=https://google.com. Works in Chrome 80.
Of course it works only if it's acceptable for your project to be launched in App mode and you have a page link you can insert there. See this answer of mine for a little more info.
You can also use --test-type command line flag, which removes such infobars too.
Attention! In very rare cases it causes strange things like muting page sound! So I'm not sure I should recommend it in the first place.
In Ruby, for the selenium-webdriver gem, which is often used with Capybara, use ::Selenium::WebDriver::Chrome::Options#add_option('excludeSwitches', ['enable-automation']).
For example:
Capybara.register_driver :selenium_chrome do |app|
browser_options = ::Selenium::WebDriver::Chrome::Options.new
browser_options.add_option 'excludeSwitches', ['enable-automation']
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end
Another option in Ruby for me was:
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome, options: chrome_options)
end
def chrome_options
options = Selenium::WebDriver::Chrome::Options.new
options.add_option 'excludeSwitches', ['enable-automation']
options.add_argument('incognito')
options.add_argument('disable-geolocation')
options.add_argument('ignore-certificate-errors')
options.add_argument('disable-popup-blocking')
options.add_argument('disable-web-security')
options.add_argument('--disable-infobars')
options.add_argument('disable-translate')
options
end
Apparently you can use the CommandLineFlagSecurityWarningsEnabled chrome policy - https://www.chromium.org/administrators/policy-list-3#CommandLineFlagSecurityWarningsEnabled
On Linux I was able to create a file at /etc/opt/chrome/policies/managed/managed_policies.json with the contents: {"CommandLineFlagSecurityWarningsEnabled": false} and this disabled the warning.
On Windows 10 Pro when I set the Chrome group policy "Enable security warnings for command-line flags" to disabled (see https://support.google.com/chrome/a/answer/187202) and check the registry at Software\Policies\Google\Chrome\CommandLineFlagSecurityWarningsEnabled for a value of 0x00000000 it doesn't work for me to disable this warning. Maybe it will for you? Wondering if someone else can help shed light on why it won't work on Windows

C# WebBrowser Control Enhanced Protected Mode

I am trying to access a webpage (that is not under my control) namely allscripts sandbox via a WebBrowser control. My computer's internet explorer is correctly set up for said webpage (Added in Trusted Sites, Allowed and installed all active-x addons, running in compatibility mode, etc).
The webbrowser control displays the following error:
This webpage wants to run 'Some ActiveX control' which isn't compatible with Internet Explorer's enhanced security features. If you trust this site you can disable Enchanced Protected Mode for this site and allow the control to run.
I have not enabled (to the best of my knowledge) the enhanced protected mode.
Also trying to ignore the errors and continue with log-in displays a Message
The Centricity's container for .NET-based pages failed to initialize. Make sure your .NET environment is configured to grant Full Trust to this Website.
The above was also an error on the default IE until i run the command %WINDIR%\Microsoft.NET\Framework\v2.0.50727\caspol -q -m -cg Trusted_Zone FullTrust.
I have tried various registry keys but none seemed to work.
I have also tried implementing a custom IInternetSecurityManager that Maps all urls to zone Trusted and returns URLPOLICY_ALLOW on all ProcessUrlAction calls.
Any suggestion would be appreciated.
The problem could be that webbrowser uses by default an old version of the IE. Take a look at Use latest version of Internet Explorer in the webbrowser control
The webbrowser control is ie11 wrapped with a com wrapper that throttles back ie11 to ie7 mode. There's not a lot else going on there that I can imagine would cause your issue.
Since this page works for you when you run ie11 externally then the most likely explanation seems to be your attempt to force the control into ie11 mode is the problem.
I suggest you try Mentor's code here:
Set WPF webbrowser control to use IE10 mode
Which will automate adding the name of the running program to the registry.
var pricipal = new System.Security.Principal.WindowsPrincipal(
System.Security.Principal.WindowsIdentity.GetCurrent());
if(pricipal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)) {
RegistryKey registrybrowser = Registry.LocalMachine.OpenSubKey
(#"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
string myProgramName = Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location);
var currentValue = registrybrowser.GetValue(myProgramName);
if (currentValue == null || (int)currentValue != 0x00002af9)
registrybrowser.SetValue(myProgramName, 0x00002af9, RegistryValueKind.DWord);
}
else
this.Title += " ( Первый раз запускать с правами админа )";

IE's zone elevation protection interferences functionality of BHO

I am developing a Browser Helper Object (BHO) for Internet Explorer written in C#. I use the BeforeNavigate event to get a called URL and save it into a local variable. For every tab a new BHO instance is spawned. This means that every tab has it's own BHO which in turn have own local variables. I have checked this by displaying a MessageBox with the previous called URL (the value of the local variable) before it is overwritten with the new URL.
string myUrl = "";
void BeforeNavigate( string URL, ... )
{
System.Windows.Forms.MessageBox.Show( myUrl );
myUrl = URL.ToString();
}
But in some cases the local variable is empty although a URL was called before. I investigated the IE settings and found out that this behavior is caused by the zone elevation protection of IE. For the zones local intranet and trusted sites the protected mode is disabled while it is enabled for zones internet and restricted sites.
E.g., when intranet.com is called and then internet.com in the same tab, I would expect that the MessageBox displays intranet.com when internet.com is called. But an empty string is displayed instead. I guess that calling internet.com activates the protected mode for this tab which spawns a new instance of the BHO. The MessageBox will now display the value of the variable of the new BHO instance. The value of the variable of the old BHO gets lost.
If protected mode is enabled for zones local intranet and trusted sites the BHO behaves correctly. I guess that the protected mode is disabled in this zones for compatibility reasons. There may exists websites in the intranet that do not work with protected mode. Thus, I am looking for a solution that works with protected mode disabled for this zones.
Since IE manages the loading of the BHO I doubt that this problem can be solved from within the BHO.
Does anybody have deeper knowledge about this topic to confirm my guess?
Is it possible to keep the variable's value with protected mode disabled for zones local intranet and trusted sites?
Any help will be appreciated, thanks!
I found the following link: http://jimevansmusic.blogspot.com/2012/08/youre-doing-it-wrong-protected-mode-and.html
There is said:
When you cross into or out of Protected Mode by, say, navigating from an internal intranet website to one on the internet, IE has to create a new process, because it can't change the Mandatory Integrity Control level of the existing process. Moreover, in IE versions after 7, it's not always obvious that a Protected Mode boundary has been crossed, since IE tries to present a better user experience by seamlessly merging the browser window of the new process with the already opened browser window. This under-the-covers process switching also means that any references pointing to IE's COM objects before the Protected Mode boundary crossing are left pointing to objects that are no longer used by IE after the boundary crossing.
Based on this, my guess seems to be right. The BHO which is a COM object of IE is no longer used and thus it's value gets lost. The only solution that remains is to enable or disable protected mode for all zones.

IE "Enhanced Protected Mode (122)": What is the meaning of the "122"?

I am developing a Browser Helper Object (BHO) for Internet Explorer written in C#. I use the BeforeNavigate event to get a called URL and save it into a local variable. For every tab a new BHO instance is spawned. This means that every tab has it's own BHO which in turn have own local variables. I have checked this by displaying a MessageBox with the previous called URL (the value of the local variable) before it is overwritten with the new URL.
string myUrl = "";
void BeforeNavigate( string URL, ... )
{
System.Windows.Forms.MessageBox.Show( myUrl );
myUrl = URL.ToString();
}
But in some cases the local variable is empty although a URL was called before. I investigated the IE settings and found out that this behavior is caused by the zone elevation protection of IE. For the zones local intranet and trusted sites the protected mode is disabled while it is enabled for zones internet and restricted sites.
E.g., when intranet.com is called and then internet.com in the same tab, I would expect that the MessageBox displays intranet.com when internet.com is called. But an empty string is displayed instead. I guess that calling internet.com activates the protected mode for this tab which spawns a new instance of the BHO. The MessageBox will now display the value of the variable of the new BHO instance. The value of the variable of the old BHO gets lost.
If protected mode is enabled for zones local intranet and trusted sites the BHO behaves correctly.
This issue I already described in IE's zone elevation protection interferences functionality of BHO to this point.
When I enable the EPM (Enhanced Protected Mode) the same problem occurs even if protected mode is enabled in all zones. Strangely also if I explicitly remove the tested URLs from the zones local intranet and trusted sites. (Note that "protected mode" and "enhanced protected mode" are different.)
In the context menu of a website the menu item properties gives information about the mode in which a website is executed. For websites in the internet the mode Internet | Protected Mode: Enhanced is displayed indicating that this website is executed in EPM.
I discovered that websites that belong to the intranet are executed in a "special" EPM. For an intranet website the mode Local Intranet | Protected Mode: Enhanced (122) is displayed. After I removed the tested URLs from the zones, Internet | Protected Mode: Enhanced (122) is displayed. I tried to find out what the 122 means but could not find any helpful information. It seems that calling a Internet | Protected Mode: Enhanced (122) website and then a Internet | Protected Mode: Enhanced website in the same tab triggers a boundary crossing which leads to the same issue.
Can anyone provide information about the meaning of the 122?
Any help will be appreciated, thanks!
In my opinion, it is just an inner serial number.
For more information about Enhanced Protected Mode, see the following Internet Explorer blog articles:
Enhanced Protected Mode
Understanding Enhanced Protected Mode

Unable to click login button on angular site in IE (Selenium)

For some reason I seem unable to click a login button when using the selenium IEDriver. It works fine in both Chrome and Firefox.
Website is http://www.notacv.com/
Simple code...
IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://www.notacv.com");
IWebElement element2 = driver.FindElement(By.CssSelector("div.container-fluid.hero ul li:nth-child(1)"));
element2.Click();
I've tried the following to remedy the problem with no success
Have tried referencing both the li and the a tags
Both XPath and CSS selector - both confirm to find only one element via Chrome developer toolbar
Thread.sleep (prevents the error but does nothing when it gets to the click)
Repeating the click and the wait
Javascript, JQuery and angular waits
SendKeys(Keys.Enter)
actions -> moveto.Click()
Explicit wait to check displayed, visibility, enabled
Protractor for C#
Does anyone know how to fix this for IE?
please check the current link https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver#Required_Configuration
Make sure you applied required changes
The IEDriverServer exectuable must be downloaded and placed in your PATH.
On IE 7 or higher on Windows Vista or Windows 7, you must set the Protected Mode settings for each zone to be the same value. The value
can be on or off, as long as it is the same for every zone. To set
the Protected Mode settings, choose "Internet Options..." from the
Tools menu, and click on the Security tab. For each zone, there will
be a check box at the bottom of the tab labeled "Enable Protected
Mode".
Additionally, "Enhanced Protected Mode" must be disabled for IE 10 and higher. This option is found in the Advanced tab of the Internet
Options dialog.
The browser zoom level must be set to 100% so that the native mouse events can be set to the correct coordinates.
For IE 11 only, you will need to set a registry entry on the target computer so that the driver can maintain a connection to the instance
of Internet Explorer it creates. For 32-bit Windows installations,
the key you must examine in the registry editor is
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet
Explorer\Main\FeatureControl\FEATURE_BFCACHE. For 64-bit Windows
installations, the key is
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet
Explorer\Main\FeatureControl\FEATURE_BFCACHE. Please note that the
FEATURE_BFCACHE subkey may or may not be present, and should be
created if it is not present. Important: Inside this key, create a
DWORD value named iexplore.exe with the value of 0.

Categories

Resources