Tag Archives: firefox

Error reporting in Firefox using selenium in Python

python error in Firefox with selenium:

Traceback (most recent call last):
File “G:\python_work\chapter11\test_selenium_firefox.py”, line 10, in <module>
driver = webdriver.Firefox()
File “C:\Python34\lib\site-packages\selenium\webdriver\firefox\webdriver.py”, line 154, in __init__
keep_alive=True)
File “C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 140, in __init__
self.start_session(desired_capabilities, browser_profile)
File “C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 229, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File “C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 297, in execute
self.error_handler.check_response(response)
File “C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py”, line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Unable to find a matching set of capabilities

=============================

python version 3.4.3 , selenium version 3.4.3 , Firefox version 49.0.

 

The reason for the error is the version compatibility between python, selenium, Firefox , after upgrading Firefox to the latest version 55.0 the problem is solved.

Also selenium needs geckodriver when calling Firefox, download it and add it to the Firefox installation directory, and add the Firefox installation directory to the system environment variable Path.

=============================

Test code:

1 from selenium import webdriver
2 
3 driver = webdriver.Firefox()
4 driver.get("http://www.google.com")

Ajax submitting datagram in firebox_ ERROR_ DOCUMENT_ NOT_ Cached error

What are the eight life cycle hook functions of Vue>>>

Cause

In order to simulate the data returned by the interface, the group writes an automatic data filling page, which needs to be manually clicked to return every time it comes to this page. There are two forms on the page, and the target points to both_ Self, today I wrote an implementation of using JS to submit these two forms respectively. The function is very direct, and I submitted the code without thinking about it. It works in IE and chrome, but only one of the two forms is submitted in firebox. Using httpfox to capture the package, a mistake is prompted: Post (about) ns_ BINDING_ The following is a brief record of the process

Initial code:

window.onload =  autoReturn;

function autoReturn()
{
    var value = window.confirm("auto return or not?");
	if(value==true)
    {
	ajaxNotify();
	//return form
	document.return_form.submit();
    }
}

function ajaxNotify()
{
    var xmlhttp;
    if(window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest();
    }
    else
    {
	 xmlhttp = new ActiveObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function()
    {
	 if(xmlhttp.readyState==4 && xmlhttp.status==200)
	 {
	 	console.log(xmlhttp.responseText);
	 }
    }
    //notify form
    var form = document.notify_form;
    var inputs = form.getElementsByTagName('input');
    var postData = '';
    for(var i=0, len=inputs.length; i<len; i++)
    {
        if(i!=0)
	    postData += '&';
        postData += inputs[i].name + '=' + inputs[i].value;
    }
    xmlhttp.open("POST", form.action, true);
    xmlhttp.send(postData);
    console.log("postData=" + postData);
}

The above is the original code, because the page is very simple, there is no jQuery and other plug-ins. After several times of testing in Firefox, it is found that the form submitted by Ajax post method is always unable to be submitted

POST (Aborted) NS_ BINDING_ The content in the HTTP fox request package is error loading content (NS)_ ERROR_ DOCUMENT_ NOT_ CACHED)。 I searched the Internet and found that many people met ns_ ERROR_ DOCUMENT_ NOT_ Most of the errors in cached are related to the configuration of fire cache parameters. For details, please refer to httpfox. However, this problem is not consistent with what I encountered. Under the reminder of @ Yuanbo, we use the encoding component method of JS to encode the data field once, and set the HTTP header information. The code is as follows:

After encode:

//notify form
    var form = document.notify_form;
    var inputs = form.getElementsByTagName('input');
    var postArr = [];
    for(var i=0, len=inputs.length; i<len; i++)
    {
	postArr.push(inputs[i].name + "=" + encodeURIComponent(inputs[i].value));
    }
    xmlhttp.open("POST", form.action, true);
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlhttp.send(postArr.join('&'));
    console.log("postData=" + postArr.join('&'));

However, there are still problems. No way, had to comment out the code to submit the page, only to submit the post part, even can be submitted. At this time, you will find the power of professionalism, @ Yuanbo pointed out, did firebox cancel the previous post when submitting the form?This analysis coincides with the previous error message. According to this idea, the code is further adjusted: wait for the post method to return, then submit, and set the timeout to forcibly submit the page

The final code is:

window.onload =  autoReturn;

function autoReturn()
{
    var value = window.confirm("auto return or not?");
    if(value==true)
    {
	ajaxNotify();
    }
}

function ajaxNotify()
{
    var xmlhttp;
    if(window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest();
    }
    else
    {
	xmlhttp = new ActiveObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function()
    {
	document.return_form.submit();
	if(xmlhttp.readyState==4 && xmlhttp.status==200)
	{
	    console.log(xmlhttp.responseText);
	}
    }
    //notify form
    var form = document.notify_form;
    var inputs = form.getElementsByTagName('input');
    var postArr = [];
    for(var i=0, len=inputs.length; i<len; i++)
    {
	postArr.push(inputs[i].name + "=" + encodeURIComponent(inputs[i].value));
    }
    xmlhttp.open("POST", form.action, true);
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlhttp.send(postArr.join('&'));
    setTimeout(function(){
	document.payment_return.submit();
    }, 500);
    console.log("postData=" + postArr.join('&'));
}

Summary:

Front end code is closely related to the browser, understanding the basic principles of the browser can write more robust code

selenium.common.exceptions.WebDriverException: Message: ‘geckodriver’ executable needs to…

Using selenium webriver for the first time, webdriver.Firefox ()

Error report selenium.common.exceptions . webdriverexception: Message: ‘geckodriver’ executable needs to be in path.

Windows processing method:

1. Download geckodriver.exe :

Download address: https://github.com/mozilla/geckodriver/releases
Choose to download according to the system version (such as windows 64 bit system)

2. After downloading and decompressing, the getckodriver.exe Put it in the python installation directory. If you have checked addtopath when installing python, you don’t need to do anything. Otherwise, you need to add the python installation directory to the system variable environment variable path.

3. Run the code again
2

Other browsers have similar processing methods; download address of each browser driver

https://www.seleniumhq.org/about/platforms.jsp#browsers

firefox: https://github.com/mozilla/geckodriver/releases/

chrome: https://code.google.com/p/chromedriver/downloads/list

ie: http://selenium-release.storage.googleapis.com/index.html

-WebKit margin before and extended browser prefix and kernel

-WebKit margin before is the definition method statement of article segment P container in css3.0.

Display: block only defines the P container as a block

And: – WebKit margin before/after: 1em — defines the upper margin and the lower margin of P respectively, which are 1 times the height of the font. If it is a 10px word, then the margin is 10px

-WebKit margin start/end: 0px — define the P container as 0px for both left and right margins.

In other words, in CSS3:

p {

display: block;

-webkit-margin-before:1em;

-webkit-margin-end:1em;

-webkit-margin-after:1em;

-webkit-margin-start:1em;

}

Equivalent to CSS2:

p {

display: block;

margin-top: 1em;

margin-right: 1em;

margin-bottom: 1em;

margin-left: 1em;

}

But because CSS3 requires a higher browser version, there is no popular CSS3 style in China, and CSS2 is still the mainstream, but it should be the world of CSS3 in the future, because it represents advanced technology.

browser kernel:

WebKit was originally an open source project of Apple company, and their own Safari was useful. Later, Google also built an open source browser project chromium with this typesetting engine and its own V8 JavaScript engine, and only made its own Chrome with this project. At the same time, the two browser cores on the mobile platform use WebKit. Thanks to chromium engine, there are also many WebKit browsers on PC platform: 360, window of the world, maple browser, sunflower browser, Sogou browser, roam 3 and Cheetah browser. Basically speaking, I’m a dual core, and I use chromium for any speed mode. Correspondingly, Microsoft’s IE uses the Trident typesetting engine, which is commonly known as the IE kernel. Firefox also has its own gecko typesetting engine. Apple’s iBooks also uses WebKit as the typesetting engine, while Sigil, the editing software, uses chromium, because it is also the WebKit kernel.

browser prefix:

Common: – WebKit – (chrome), –

     -moz-(Firefox)、

     -0-(Opera)、

     -ms-(IE)

Why a private prefix

W3C, the organization that formulates HTML and CSS standards, is very slow. Usually, members of W3C organizations put forward a new attribute, such as rounded border radius, which everyone thinks is good. However, W3C will not formulate standards for this attribute. Instead, it has to go through complex procedures and go through a lot of reviews. Browser vendors are not willing to wait so long. They think that an attribute is enough When you are familiar with it, you will add support to the browser. However, to avoid the W3C publishing the standard in the future, let the new version of the browser support the border radius attribute after the standard writing of border radius is established.

For example, chrome 10 doesn’t recognize the border radius writing method. It can only use – WebKit border radius, but chrome 12 can recognize it. Therefore, when writing CSS, it can ensure that the web pages of chrome 10 and 12 can be displayed normally.

Firebox always sends get requests to http://detectportal.firefox.com/success.txt

When using burpsuite to capture packets, the record always catches a lot of packets below, which is particularly annoying. Moreover, it keeps grabbing and drowns all the data that should be seen. You can set it as follows: firebox will no longer send this URL to burpsuite.

1. Enter in the address bar of firebox:

about:config

2. Search for the following and set it to false

network.captive-portal-service.enadbled

event.srcElement And event.target The difference between

window.event.srcElement And window.event.target They all point to the element that triggers the event. It has the same attributes as it is

Srclelement is the target HTML element object reference of event initialization, because events bubble through the element hierarchy and can be processed at any layer

With a reference to an element, you can read, write, and change the attributes of the element.

IE browser support window.event.srcElement And firebox supports window.event.target ;

event.srcElement Literally, there are the following keywords: event, Source: the source of the current event,
we can call its various properties, such as: document.getElementById (“) for such functions,
people often ask about the event.srcElement How to use it is explained in detail here:
in ie, the event object has the srclelement attribute but no target attribute; in Firefox, the event object has the target attribute, However, there is no srclelement attribute, but their functions are equivalent, that is:
in firebox event.target =Under IE event.srcElement

Solution: use obj (obj)= event.srcElement ? event.srcElement : event.target ; )Instead of IE event.srcElement Or in Firefox event.target .

in JS, this and window.event.srcElement [the following content is reprinted]

let’s start with a simple example:

<input type=”text”
onblur=”alert( this.value ) “/ &> no problem at all.

under what circumstances can it not be used?

fuction method()

{

alert( this.value );

}

≪ input type = “text”
onblur = method() “/ &> this is not OK, because method() is a function called by the response function.

what should we do in this case?

method 1:

fuction method(btn)

{

alert( btn.value );

}

≪ input type = “text” onblur = method (this) “/ &> no problem!

method 2:

fuction method()

{

alert( window.event.srcElement .value);

}

≪ input type = “text”
onblur = method() “/ &> no problem! window.event.srcElement Gets the control that triggers the event

The XPath tool plug-in for Firefox browser (not supported by advanced versions of Firefox)

After looking for the XPath tool on Firefox for a long time, I made a little summary

####About the XPath plug-in for Firefox:

1、firebug

From https://addons.mozilla.org/en-US/firefox/addon/firebug/ You can choose the version to download; the latest one is five years ago… Restart after installation

2、WebDriver Element Locator

Download address: https://addons.mozilla.org/en-US/firefox/addon/element-locator-for-webdriv/

3. At present, the official download Plug-in connection of XPath checker has not been found. Free network disk of XPath checker https://yun.baidu.com/s/1ntieVyD

All the above are from the Internet. If you have any questions, please leave a message

Summary of internationally renowned CSS Reset

NO.01 CSS Tools: Reset CSS

Website: https://meyerweb.com/eric/tools/css/reset/

Pros: Old brand, with a lot of people.

/* http://meyerweb.com/eric/tools/css/reset/ 
   v2.0 | 20110126
   License: none (public domain)
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}

NO.02 yui: Reset CSS

Website: https://yuilibrary.com/yui/docs/cssreset/

Advantages: Yahoo legacy, big works

/*
YUI 3.18.1 (build f7e7bcb)
Copyright 2014 Yahoo! Inc. All rights reserved.
Licensed under the BSD License.
http://yuilibrary.com/license/
*/

html{color:#000;background:#FFF}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;*font-size:100%}legend{color:#000}#yui3-css-stamp.cssreset{display:none}

NO.3HTML5 Reset Stylesheet

Website: https://www.webfx.com/blog/web-design/css-reset-stylesheets/

gitHub: https://github.com/murtaugh/HTML5-Reset/blob/master/assets/css/reset.css

Pros: News

/*
    HTML5 Reset :: style.css
    ----------------------------------------------------------
    We have learned much from/been inspired by/taken code where offered from:
    Eric Meyer                    :: http://meyerweb.com
    HTML5 Doctor                :: http://html5doctor.com
    and the HTML5 Boilerplate    :: http://html5boilerplate.com
-------------------------------------------------------------------------------*/

/* Let's default this puppy out
-------------------------------------------------------------------------------*/

html, body, body div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, figure, footer, header, menu, nav, section, time, mark, audio, video, details, summary {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font-weight: normal;
    vertical-align: baseline;
    background: transparent;
}

main, article, aside, figure, footer, header, nav, section, details, summary {display: block;}

/* Handle box-sizing while better addressing child elements:
   http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */
html {
    box-sizing: border-box;
}

*,
*:before,
*:after {
    box-sizing: inherit;
}

/* consider resetting the default cursor: https://gist.github.com/murtaugh/5247154 */

/* Responsive images and other embedded objects */
/* if you don't have full control over `img` tags (if you have to overcome attributes), consider adding height: auto */
img,
object,
embed {max-width: 100%;}

/*
   Note: keeping IMG here will cause problems if you're using foreground images as sprites.
    In fact, it *will* cause problems with Google Maps' controls at small size.
    If this is the case for you, try uncommenting the following:
#map img {
        max-width: none;
}
*/

/* force a vertical scrollbar to prevent a jumpy page */
html {overflow-y: scroll;}

/* we use a lot of ULs that aren't bulleted.
    you'll have to restore the bullets within content,
    which is fine because they're probably customized anyway */
ul {list-style: none;}

blockquote, q {quotes: none;}

blockquote:before,
blockquote:after,
q:before,
q:after {content: ''; content: none;}

a {margin: 0; padding: 0; font-size: 100%; vertical-align: baseline; background: transparent;}

del {text-decoration: line-through;}

abbr[title], dfn[title] {border-bottom: 1px dotted #000; cursor: help;}

/* tables still need cellspacing="0" in the markup */
table {border-collapse: separate; border-spacing: 0;}
th {font-weight: bold; vertical-align: bottom;}
td {font-weight: normal; vertical-align: top;}

hr {display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0;}

input, select {vertical-align: middle;}

pre {
    white-space: pre; /* CSS2 */
    white-space: pre-wrap; /* CSS 2.1 */
    white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
    word-wrap: break-word; /* IE */
}

input[type="radio"] {vertical-align: text-bottom;}
input[type="checkbox"] {vertical-align: bottom;}
.ie7 input[type="checkbox"] {vertical-align: baseline;}
.ie6 input {vertical-align: text-bottom;}

select, input, textarea {font: 99% sans-serif;}

table {font-size: inherit; font: 100%;}

small {font-size: 85%;}

strong {font-weight: bold;}

td, td img {vertical-align: top;}

/* Make sure sup and sub don't mess with your line-heights http://gist.github.com/413930 */
sub, sup {font-size: 75%; line-height: 0; position: relative;}
sup {top: -0.5em;}
sub {bottom: -0.25em;}

/* standardize any monospaced elements */
pre, code, kbd, samp {font-family: monospace, sans-serif;}

/* hand cursor on clickable elements */
.clickable,
label,
input[type=button],
input[type=submit],
input[type=file],
button {cursor: pointer;}

/* Webkit browsers add a 2px margin outside the chrome of form elements */
button, input, select, textarea {margin: 0;}

/* make buttons play nice in IE */
button,
input[type=button] {width: auto; overflow: visible;}

/* scale images in IE7 more attractively */
.ie7 img {-ms-interpolation-mode: bicubic;}

/* prevent BG image flicker upon hover
   (commented out as usage is rare, and the filter syntax messes with some pre-processors)
.ie6 html {filter: expression(document.execCommand("BackgroundImageCache", false, true));}
*/

/* let's clear some floats */
.clearfix:after { content: " "; display: block; clear: both; }

NO .4 Normalize.css

Website: https://necolas.github.io/normalize.css/

Advantages: it’s not CSS Reset, but keeping the same element consistent in different browsers

/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */

/* Document
   ========================================================================== */

/**
 * 1. Correct the line height in all browsers.
 * 2. Prevent adjustments of font size after orientation changes in iOS.
 */

html {
  line-height: 1.15; /* 1 */
  -webkit-text-size-adjust: 100%; /* 2 */
}

/* Sections
   ========================================================================== */

/**
 * Remove the margin in all browsers.
 */

body {
  margin: 0;
}

/**
 * Render the `main` element consistently in IE.
 */

main {
  display: block;
}

/**
 * Correct the font size and margin on `h1` elements within `section` and
 * `article` contexts in Chrome, Firefox, and Safari.
 */

h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

/* Grouping content
   ========================================================================== */

/**
 * 1. Add the correct box sizing in Firefox.
 * 2. Show the overflow in Edge and IE.
 */

hr {
  box-sizing: content-box; /* 1 */
  height: 0; /* 1 */
  overflow: visible; /* 2 */
}

/**
 * 1. Correct the inheritance and scaling of font size in all browsers.
 * 2. Correct the odd `em` font sizing in all browsers.
 */

pre {
  font-family: monospace, monospace; /* 1 */
  font-size: 1em; /* 2 */
}

/* Text-level semantics
   ========================================================================== */

/**
 * Remove the gray background on active links in IE 10.
 */

a {
  background-color: transparent;
}

/**
 * 1. Remove the bottom border in Chrome 57-
 * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
 */

abbr[title] {
  border-bottom: none; /* 1 */
  text-decoration: underline; /* 2 */
  text-decoration: underline dotted; /* 2 */
}

/**
 * Add the correct font weight in Chrome, Edge, and Safari.
 */

b,
strong {
  font-weight: bolder;
}

/**
 * 1. Correct the inheritance and scaling of font size in all browsers.
 * 2. Correct the odd `em` font sizing in all browsers.
 */

code,
kbd,
samp {
  font-family: monospace, monospace; /* 1 */
  font-size: 1em; /* 2 */
}

/**
 * Add the correct font size in all browsers.
 */

small {
  font-size: 80%;
}

/**
 * Prevent `sub` and `sup` elements from affecting the line height in
 * all browsers.
 */

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/* Embedded content
   ========================================================================== */

/**
 * Remove the border on images inside links in IE 10.
 */

img {
  border-style: none;
}

/* Forms
   ========================================================================== */

/**
 * 1. Change the font styles in all browsers.
 * 2. Remove the margin in Firefox and Safari.
 */

button,
input,
optgroup,
select,
textarea {
  font-family: inherit; /* 1 */
  font-size: 100%; /* 1 */
  line-height: 1.15; /* 1 */
  margin: 0; /* 2 */
}

/**
 * Show the overflow in IE.
 * 1. Show the overflow in Edge.
 */

button,
input { /* 1 */
  overflow: visible;
}

/**
 * Remove the inheritance of text transform in Edge, Firefox, and IE.
 * 1. Remove the inheritance of text transform in Firefox.
 */

button,
select { /* 1 */
  text-transform: none;
}

/**
 * Correct the inability to style clickable types in iOS and Safari.
 */

button,
[type="button"],
[type="reset"],
[type="submit"] {
  -webkit-appearance: button;
}

/**
 * Remove the inner border and padding in Firefox.
 */

button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
  border-style: none;
  padding: 0;
}

/**
 * Restore the focus styles unset by the previous rule.
 */

button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
  outline: 1px dotted ButtonText;
}

/**
 * Correct the padding in Firefox.
 */

fieldset {
  padding: 0.35em 0.75em 0.625em;
}

/**
 * 1. Correct the text wrapping in Edge and IE.
 * 2. Correct the color inheritance from `fieldset` elements in IE.
 * 3. Remove the padding so developers are not caught out when they zero out
 *    `fieldset` elements in all browsers.
 */

legend {
  box-sizing: border-box; /* 1 */
  color: inherit; /* 2 */
  display: table; /* 1 */
  max-width: 100%; /* 1 */
  padding: 0; /* 3 */
  white-space: normal; /* 1 */
}

/**
 * Add the correct vertical alignment in Chrome, Firefox, and Opera.
 */

progress {
  vertical-align: baseline;
}

/**
 * Remove the default vertical scrollbar in IE 10+.
 */

textarea {
  overflow: auto;
}

/**
 * 1. Add the correct box sizing in IE 10.
 * 2. Remove the padding in IE 10.
 */

[type="checkbox"],
[type="radio"] {
  box-sizing: border-box; /* 1 */
  padding: 0; /* 2 */
}

/**
 * Correct the cursor style of increment and decrement buttons in Chrome.
 */

[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
  height: auto;
}

/**
 * 1. Correct the odd appearance in Chrome and Safari.
 * 2. Correct the outline style in Safari.
 */

[type="search"] {
  -webkit-appearance: textfield; /* 1 */
  outline-offset: -2px; /* 2 */
}

/**
 * Remove the inner padding in Chrome and Safari on macOS.
 */

[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}

/**
 * 1. Correct the inability to style clickable types in iOS and Safari.
 * 2. Change font properties to `inherit` in Safari.
 */

::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}

/* Interactive
   ========================================================================== */

/*
 * Add the correct display in Edge, IE 10+, and Firefox.
 */

details {
  display: block;
}

/*
 * Add the correct display in all browsers.
 */

summary {
  display: list-item;
}

/* Misc
   ========================================================================== */

/**
 * Add the correct display in IE 10+.
 */

template {
  display: none;
}

/**
 * Add the correct display in IE 10.
 */

[hidden] {
  display: none;
}