text:
Romneyworld reckoning begins
BOSTON — Advisers to Mitt Romney insisted Wednesday that they were surprised by the scale of their loss to President Barack Obama, while big-time GOP donors griped about the campaign's unflinching confidence in the final stretch.
As results began to stream in Tuesday night, prominent Romney supporters in Boston tried to stay positive, reassuring themselves that there was still a path to the White House. But dejection quickly turned to anger a day after an Electoral College rout that shocked many who had heard self-assured projections about voter enthusiasm and turnout in private conference calls and meetings in the campaign's final stretch.
Story Continued Below
"They ran a 20th-century campaign in the 21st century," said one Romney bundler, frustrated that the campaign made assumptions about the youth vote and voter intensity that didn't pan out. "The anger is that they were entrusted to do certain things. It's not like they were paid a $5,000 retainer to get a few dozen articles in an inside-the-Beltway paper. This is the major leagues."
Another Republican outside the Romney campaign but privy to its thinking described the defeat as a complete pummeling, with Senate losses adding salt to the wound.
Romney supporters point to a series of brash statements made by advisers that seem out of touch with reality in retrospect. Inside-the-Beltway, Republicans trained their fire on senior Romney advisers like Ed Gillespie and political director Rich Beeson for appearances on last weekend's Sunday shows. Gillespie said the electoral map was expanding, and Beeson predicted a 300 electoral vote win for Romney.
"There were a lot of Republicans who were on calls that the campaign was having led to believe we had shots in Pennsylvania and Minnesota," one Republican operative supporting Romney said. "I think Republicans are split right now between confused and shocked, and also I think they are wondering did the Romney campaign have numbers we didn't have."
In starker terms, the source questioned: "Was last week a head fake, or were they just not that smart?"
Multiple Romney sources buzzed about one number in particular: 15 percent. According to exit polls, that's the share of African-Americans who voted in Ohio this year. In 2008, the black percentage of the electorate was 11 percent. In Virginia and Florida, exit polls showed the same share of African-Americans turned out as four years ago, something that GOP turnout models did not anticipate.
"We didn't think they'd turn out more of their base vote than they did in 2008, but they smoked us," said one Romney operative. "It's unbelievable that they turned out more from the African-American community than in 2008. Somehow they got 'em to vote."
African-Americans supported Obama nearly universally, but Obama still won Ohio only by 1.9 percent.
"We just didn't see the enthusiasm with their base," he added. "We had enthusiasm on our side. So we thought, 'Yeah, we're gonna win this.' … We hit our numbers in rural areas. When Fox called it, we still thought we had a chance based on what we could figure was in and what was still out."


text:
Why Obama is winning
Unemployment is over 8 percent. Nearly 60 percent of Americans, according to a new poll, believe the country is on the wrong track. The number of people on food stamps is at a historic high and the median net worth of American families is at a 20-year low.
If it was true that winning elections is mostly a matter of numbers — as some political scientists and campaign operatives like to argue — Barack Obama's reelection as president should be close to a mathematical impossibility. For much of this presidential election cycle, Republicans were counting on precisely this.
Story Continued Below
But 2012 is proving that politics isn't just about numbers, and some traditional leading indicators look as if they are losing their predictive power.
( Also on POLITICO: Inside the campaign: How Romney stumbled)
With Obama holding a narrow but so far sturdy lead over Mitt Romney in polls, many incredulous Republicans sound like the Michael Dukakis character in a 1988 Saturday Night Live skit: "I can't believe I'm losing to this guy."
The phenomenon is the result of three powerful factors, according to interviews with some two dozen political veterans from both parties.
The first is a rapidly changing, deeply polarized electorate — one in which external circumstances don't necessarily swing large numbers of voters whose minds are deeply made up — and also one that, on balance, is becoming more Democratic due to demographic trends. In an environment like this, Obama has not seen his political bottom fall out, as happened to George H.W. Bush in 1992, when Al Gore cited a barrage of statistics and taunted, "Everything that should be down is up, and everything that should be up is down."
But a more hardened political landscape also means that — at the margins — candidate skills and attributes matter more than ever.
Obama's durability, according to polling and interviews, is the result of a unique connection with voters as someone who broke racial barriers in 2008, his ability to evade much the blame for the recession and a brutally effective campaign.
Romney's inability to capitalize on trends with the economy and national mood that would normally create a wide opening for a challenger is in large measure a reflection of his own defects as candidate and failure to sell himself to voters, according to these same sources, many of whom are Republicans hoping to beat Obama.
"He came into the general election with a very negative [image] rating and he has not effectively addressed that," said longtime GOP pollster Jan van Lohuizen, who worked for Romney in 2008. "What they've been doing for five months hasn't worked. At some point, they need to come to the conclusion that it's not worked."
"We're running a good campaign so far but we're not running a great campaign," said Rep. Tom Cole (R-Okla.). "We're going to have to run a great campaign to beat this guy."
Below are the three political engines that are helping Obama defy the traditional laws of political gravity:

subset: commoncrawl


text:
Man pleads guilty to beating, strangling nun
ALBUQUERQUE, N.M. (AP) — A man who beat a nun over the head with a flashlight and then strangled her to quiet her moans pleaded guilty to second-degree murder in federal court Friday under a deal that saved him a possible mandatory life sentence.
Reehahlio Carroll faces 40 years in prison without parole in the 2009 killing of Sister Marguerite Bartz, 64, who interrupted a burglary at her home on the St. Berard Mission in the community of Navajo on the Navajo Indian Reservation in northwestern New Mexico.
U.S. District Judge William Johnson accepted the plea but formal sentencing still needs to be scheduled. Carroll faced a mandatory life term if convicted of the original charges that included first-degree murder.
Prosecutors said Carroll, who just turned 21, confessed to breaking into the nun's trailer home around midnight Nov. 1, 2009, in search of money and items that could be traded for cash or drugs and alcohol. He attacked Bartz with a flashlight her after she hit him with a slipper as he entered a bedroom, hitting her over the head five or six times and kicking her as she lay on the ground, he acknowledged in court on Friday. He then resumed rummaging through the trailer, going back to tie a shirt around her mouth and neck after she began moaning.
Bartz, a member of the Order of the Sisters of the Blessed Sacrament, was found in a pool of blood late that evening after she didn't show up for Mass.
Carroll was arrested a few days later after law enforcement learned he had been seen driving her car.
Carroll wore shackles and jail garb in court Friday. His head hanging low, he got emotional as he acknowledged the brutal details of the crime.
After the hearing, U.S. Attorney Ken Gonzales noted the "tragic irony" of Bartz falling victim to the high rate of violence on the reservation, saying she "was a woman who dedicated her life to bringing peace and harmony to the Navajo Nation."
Prosecutor Paul Spiers said the nun's family and fellow sisters agreed to the plea agreement during a March 12 meeting that focused on "forgiveness, redemption and rehabilitation."
"The people who loved her most saw comfort in this resolution," Spiers said.
An initial review from a neurologist concluded that Carroll, who is also from Navajo, likely had mild to moderate mental disability. However, a judge nearly two years ago found him competent to stand trial.


text:
Starting up a business, or entering a new market channel, is never easy. Starting a business on the World Wide Web (the web), or moving an existing "offline" business there, requires not only effort and risk, but also demands new knowledge and skills. These tips should help reduce your risk in bringing a business to the web.
1. Your domain name is your address "" choose it wisely.
Your domain name (such as www.BoadweeLaw.com) is your address on the web. Choose it with care, because you'll be promoting it to potential customers in marketing materials, emails, search results, and the like.
Your domain name, your company name and your trademarks are all separate for legal purposes. In other words, obtaining a company name (such as a corporate or limited liability company (LLC) name from the Secretary of State of your state), or an assumed name or DBA name, does not provide you with a domain name, or vice versa. You even can have many domain names that point to the same web site (ask your domain name provider how to "redirect" the traffic to the site.)
A domain name itself is not a trademark. If you want to protect your business from others using company names or domain names similar to yours for similar or competing goods or services, you should obtain a trademark registration. Many businesses use the web to establish a national presence. A federal trademark registration will best preserve your ability to use your brand throughout the United States. Also, even if you don't register your mark, it is usually a good idea to search for conflicting trademarks owned by others, because they may be able to seize your domain name (or even sue for damages) if it conflicts with their pre-existing trademark rights.
2. Your web site is your storefront "" watch out for "hidden" landlords.
It seems that every service provider today seeks what MBA's call a "recurring revenue stream" "" i.e., a service plan in which you keep paying and paying… month after month… like a utility bill. The terms and conditions are most likely non-negotiable. Unless you have a large company or purchase a great deal of bandwidth, you'll likely have to take the terms offered by your telephone or cable company for internet access, whether by DSL, cable modem or wireless. Similarly, web site hosting, email, ecommerce and shopping cart providers offer monthly services. Ask yourself whether you truly need these services as a utility, or could make an upfront purchase and maintain the resources yourself. Compare features, reliability and support.
With some care, you can reduce your expenses and your risk. First, try to purchase ownership of any web sites, designs, etc. that you commission, if the price is right for you. The providers probably won't grant this if you are subscribing to off-the-shelf functionality (such as a hosted online shopping cart) or if you are paying a lower rate for a template that the provider uses for other customers. Second, make sure that independent contractors, such as web designers or web masters, have written agreements with you. Take ownership of their work product whenever you can. Third, be sure to obtain photo permissions and other content licenses in your name (not your contractor's name), so that you are clearly the owner. If you fail to do this, you may find yourself with "hidden" landlords demanding payment.
3. Every site needs Terms of Service.
As a business owner in the bricks and mortar world, you might post a sign with your check acceptance and product returns policies so that customers would understand what you expect in dealing with them. The web is similar. To place these policies in your online store or site, post "Terms of Service" (TOS) or an "End User Agreement" on your web site.
The Disclaimer of Warranty is a critical piece of your TOS. The Disclaimer of Warranty might state, for example, "THIS SITE AND ITS CONTENTS ARE PROVIDED AS-IS, AND ALL WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED." This is derived from the Uniform Commercial Code (UCC) as enacted by all states, and is intended to protect you from unjustified claims that your site or statements on your site created an official "warranty" to your potential customers. (You should also disclaim liability for third-party sites to which you link.) Another essential TOS provision is the Limitation of Liability, which limits the amount of damages that can be recovered in a lawsuit. TOS can also include your other sales and returns policies, licenses to use intellectual property, support terms and other legal terms unique to your business (for example, if your business is regulated by the government). TOS also may include notices of any copyrights, trademarks or patents that you own. TOS may seem to be fairly generic, but should be drafted or reviewed by a lawyer to tailor them specifically to your business.
Terms of Service commonly are provided through a text link at the bottom of all the pages of the web site, but that approach currently is not legally enforceable in all situations or all states. If you are selling high-value goods or otherwise need a clearly enforceable contract, then the customer should click an "I agree" button after looking at the Terms of Service and before proceeding with entering an order, etc. Have a lawyer review the order flow.
4. If your site collects personal information, it needs a privacy policy.
There are good business reasons for posting a privacy policy on your web site, including customers' confidence in your use of their personal information so that they return to buy again and again. Operators of commercial web sites that collect "personally identifiable information" from California consumers must post conspicuously a privacy policy on specified pages of their sites (including the home page), as required by the California Online Privacy Protection Act of 2003. (An operator is in violation if it fails to post a privacy policy within 30 days after being notified of non-compliance.)
The Direct Marketing Association offers a "privacy policy generator." Privacy seal companies, such TRUSTe and BBB Online, offer useful models and guidance for privacy policies, as well as "privacy seal programs" with a logo to give your customers a higher level of assurance. Because these policies can be enforced much like a contract, a lawyer should review them before posting.
5. Don't leave your online doors unlocked.
You wouldn't leave the front door to your business unlocked when you go home at night. You shouldn't leave your online store unlocked either. Insecure systems and business practices leave you vulnerable to hackers and your customers vulnerable to identity theft or worse. Also, California and many other states now require disclosure to customers of security breaches that compromise their personal information, and federal bills to regulate this area are pending as of November 2005.
Evaluate your vendors and service providers with an eye to security. Are they using industry-standard practices, such as encrypting credit-card data? For example, many sites do this by using "SSL" encryption for communication between electronic shopping carts and web browsers. Use care when disposing of documents that contain sensitive customer information; if on paper, shred them, and if electronic, make sure they are erased thoroughly. The Federal Trade Commission (FTC) enacted a "Disposal Rule" that requires businesses to use reasonable efforts (such as shredding) to destroy consumer credit reports and credit scores and other specified similar information.
6. If your customers can post, you need this little-known legal shield.
It's essential today for sites to enable two-way dialogues with their visitors, for example, by enabling visitors to post online feedback about their products or customer service. Unfortunately, customers don't always realize that posting other people's text, songs or images could violate copyrights "" and result in liability to you, the web site operator, as a "contributory infringer" (essentially, an accomplice to violation of the owner's rights). A federal law, the Digital Millennium Copyright Act (DMCA), can protect you from this liability. You need to implement a specific procedure to review and respond to written complaints from copyright owners (also known as "takedown notices"), and must investigate and remove any genuinely infringing material when requested. This procedure should be described on your web site.
7. On the web, the Credit Card is King.
Cash may be King in the real world, but not on the web. That means you most likely will need to accept credit cards, and thus will need a merchant credit card account. Available offerings include an account with Paypal for small or eBay-focused businesses, a merchant account integrated with an online storefront, or even a traditional merchant account for customers who see your telephone number on your site and call you. Some providers permit acceptance of debit/ATM cards now as well. And some larger businesses now enable customers to sign up directly for electronic withdrawal of funds directly from their bank accounts, much like an electronic check (also called ACH debit). Shop carefully and watch out for up-front fees, and compare commission percentages. Remember too that credit card charges are subject to chargeback by the credit card company if the customer objects to the charges.
8. Be prepared to haggle, electronically.
In many ways, the web is like a giant bazaar, with a constant ebb and flow of price negotiations. eBay is famous for its online auctions, with automated bidding procedures. Likewise, Google and Yahoo Search Marketing (and its predecessor, Overture) have extended the auction model to advertising "" short text ads can be purchased through a competitive bidding process that is continually updated. This is a much different model from buying an ad of a certain size and placement in the Yellow Pages or classified ad section of the local newspaper! It creates a new complexity to buying ads "" make sure you understand the system and read the fine print carefully. Many firms hire consultants to help them get the best results from online marketing. Expect to see these dynamic mechanisms applied to other areas of commercial life, as well.
9. Guard your reputation.
Just as in the real world, your reputation is important. Many systems and marketplaces include online evaluations available to all users. For example, eBay and Amazon sellers strive for high evaluations by offering great service and dealing effectively with customer complaints. It may be extremely difficult or even impossible to delete any negative comments. For example, a web service called the "Wayback Machine" enables users to see older, archived versions of web pages. In addition, sending email too liberally may result in your company being branded a spammer, and being added to the "blackhole" lists that result in all your emails being undeliverable. The federal CAN-SPAM Act regulates commercial email. You simply can't be too careful with your reputation "" either offline or on the web.
10. What's your plan B?
The web and many of the leading sites (such as eBay, Yahoo and Google) are generally reliable. But don't forget they can change their terms and fees at almost any time. Any internet resource could suffer a devastating, unpredicted interruption "" or just a frustrating slowdown. Internet users are notoriously fickle and fad-driven, and can move to a different provider at the click of a mouse. What's your Plan B? Do you have a backup provider? Consider having a small account or presence with a second (or third …) provider for each critical service.
11. Bonus tip "" Many people still live in the bricks and mortar world.
Although more business is being conducted online each day, there still are substantial business opportunities in the bricks and mortar world. Most businesses should not completely abandon their offline business strategies, but rather integrate the online and offline components to reinforce each other, even as online usage and commerce continues to grow. The business and legal issues of the online world layer on top of, and interact with, those issues of the offline world.
This is just a sample of the major legal issues to consider when bringing your business to the web. As technology improves, new issues are certain to emerge. Offline and online businesses face the same, key question: as technology advances, how will you continue to delight your customers and create enduring value in your business?
California Online Privacy Protection Act of 2003, Cal. Bus. & Prof. Code Sections 22575 to 22579. Online marketing to children under the age of 13 is strictly regulated under the Children's Online Privacy Protection Act of 1998. Privacy of information in the financial services field is also regulated by the Gramm-Leach-Bliley. See "In Brief: The Financial Privacy Requirements of the Gramm-Leach-Bliley Act," http://www.ftc.gov/bcp/conline/pubs/buspubs/glbshort.htm. Healthcare information is regulated by the Health Insurance Portability and Accountability Act of 1996 (HIPAA). See also more information at the Department of Health and Human Services web site.
California security breach information act, also known as SB 1386, codified at California Civil Code Sections 1798.29, 1798.82 and 1798.84. On the FTC Disposal Rule, see FTC Business Alert, "Disposing of Consumer Report Information? New Rule Tells How," http://www.ftc.gov/bcp/conline/pubs/alerts/disposalalrt.htm. The Disposal Rule applies to credit reports, credit scores and other reports that businesses receive with information relating to employment background, check writing history, insurance claims, residential or tenant history or medical history. The Disposal Rule was enacted under the Fair and Accurate Credit Transactions Act (FACTA) of 2003, and is available at ftc.gov/os/2004/11/041118disposalfrn.pdf. Digital Millennium Copyright Act (DMCA), U.S. Copyright Act Section 512(d) and regulations issued under it.
Controlling the Assault of Non-Solicited Pornography and Marketing Act of 2003 (CAN-SPAM Act) and Regulations.
This article was originally written in October 2005 and transferred to www.BoadweeLaw.com/blog on January 3, 2012.


text:
Proud Owl Canvas print
Very noble forest animal!
Add to Wish List Delete from Wish List
You have added the following item to the comparison list.Proud Owl Canvas print
This item is available in various sizes.
The construction and assembly of our canvases with a 2cm strong wooden frame is completely done by hand. The aluminum wall hanging brackets are supplied, depending on size the amount of hanging brackets variates.
Our canvas wall decorations have the following features
- Print on high quality canvas, 65% polyester and 35% cotton
- High color intensity, saturation and durable.
- The canvas surface does make the image come to life.
- No glare due to matt surface.
- Frame completely made of 100% spruce.


text:
PORT ST. LUCIE, Fla., Feb. 25 — Of the nine Mets pitchers in the mix for three starting spots, Philip Humber and Mike Pelfrey clearly have the most potential. They are tall, polished right-handers from strong college programs and are projected to be frontline starters. It can be tempting to want to rush such talent, but the Mets are mindful of protecting their former No. 1 draft picks.
Humber and Pelfrey will not be permitted to throw too many innings too soon; the Mets do not want to risk compromising long-term plans for the sake of what could be fleeting success.
"That's why we have an Aaron Sele, a Park, a Sosa — those types of pitchers in camp," General Manager Omar Minaya said of Sele, Chan Ho Park and Jorge Sosa, starters he signed after missing out on acquiring a frontline starter before spring training started. "They give us insurance, in case some of our young guys need to develop a little bit further."
Tom Glavine and Orlando Hernández, if healthy, are assured spots in the rotation. John Maine and Oliver Pérez are considered favorites for the third and fourth slots.
The Mets are eager to see just how much more Humber, 24, and Pelfrey, 23, need to develop. So far, they have combined to pitch 23 1/3 innings at the major league level, with Pelfrey accounting for 21 1/3, including four starts last season. That alone is not reason to hold them back. But neither has come close to reaching the 200-inning threshold that durable pitchers throw in a season.Continue reading the main story
Pelfrey threw 117 2/3 last season, which included stops with three minor league teams. Humber, recovering from reconstructive elbow surgery he had in 2005, threw 78 1/3 with the Mets and three minor league teams.
"I don't think there's any way to know for sure until you do it," Humber said of pitching a full season in the majors. "I feel that the preparations I've made and the routines that I follow since my surgery will help me stay healthy."
The Mets intend to increase their workload gradually. The accepted yearly addition is about 30 innings; it is thought that more than that increases the risk of injury and could affect a young pitcher's development.
"If you're a two-miler, you can't run a marathon without gradually increasing your mileage," the pitching coach Rick Peterson said. "It's the same thing here."
Since 1996, of the 10 rookie pitchers who threw the most innings (counting the postseason), seven have either required major arm or shoulder surgery or spent significant time on the disabled list. Another, Joe Blanton of Oakland, noticeably declined after his solid 2005 season.
Detroit will find out in the coming months how Justin Verlander, last season's American League rookie of the year, will fare after pitching 207 1/3 innings. The Tigers skipped his turn at the All-Star Game break, and once in August, then gave him an extra day of rest a few times in September to keep him fresh.
That is a plan the Mets, should they keep Pelfrey or Humber in the rotation, expect to follow, too.
"There's definitely an awareness of what happened in Detroit last season," Peterson said. "You depend on your best guy to help you win a championship, and you're balancing going out there and trying to win every game with putting out your best pitcher as much as possible. It's tough."
Of the two, Pelfrey figures to have a better chance at joining the rotation immediately. Minaya said that Pelfrey, who is 6 feet 7 inches and 210 pounds, would have no problem throwing 160 to 170 innings this season.
"I know you can't make huge, huge jumps," Pelfrey said. "I just think everybody begins to hit a certain wall at a certain point, and you have to be careful what you do when you get there. I haven't gotten to that point yet."
With Humber, the Mets intend to be particularly careful. They kept him on a strict pitch count last season. And even though Humber passed the 18-month anniversary of his elbow surgery with no side effects, he will almost certainly not throw as many innings as Pelfrey.
Not all innings are created equal, however, in quantity or quality. Averaging 15 pitches a inning, for instance, puts far less strain on the arm than throwing 20 does. In the case of Humber, he threw 128 innings for Rice University in 2003, when it won the national championship, then another 30 2/3 innings that summer in the Cape Cod Baseball League.
"I threw almost 170 innings that year, and they were intense, pressure-packed innings," said Humber, who is 6-4, 210 pounds.
It is not hard to envision a situation in which Pelfrey or Humber, or probably both, spend the first few months at Class AAA New Orleans, then, if they pitch well, earn promotions. Or, just as easily, one of them could pitch well enough in spring training to gain a spot in the rotation, leaving the Mets in a desirable but tricky situation.
"If they go out there and blow people away, you can't hold them back," Minaya said. "You have to challenge them, but the key is to be smart doing so. We want them with us for a long time."Continue reading the main story


text:
It was a busy week for literature in Latin America. Festivals, conventions, and prize ceremonies brought writers and translators together, and our team members are soothing our fomo with their reporting. Find the latest news about world literature on the Asymptote blog every Friday!
Lara Norgaard, Editor-at-Large, reporting from Brazil:
The hottest summer I ever saw was the winter I spent in Rio de Janeiro. That is likely what writers and readers say as they flock to the tropical state for major literary festivals this July and August.
Brazil's most important literary event of the year, the Paraty International Literary Festival (Flip), took place from July 25–29 in Paraty, Rio de Janeiro. The festival organizer, Joselia Aguiar, explains in an interview that this year's edition focused on interiors—"love, death, desire, God, transcendence." Aguair also sought to include other artistic genres at the event, inviting guests such as actor Fernanda Montenegro. Also in Paraty and simultaneous to Flip, a group of publishers hosted book releases and even more literary programming in an event called Casa Paratodxs.


text:
OK, it's not TOB, but the original shared some of the TOB spirit, like gold transfering between players, and a strong focus on classes, so I am sure this will interest you guys as well.
I have ported the eul 3.76d Warcraft 3 map to Dota 2!
Here's the map:
http://steamcommunity.com/sharedfiles/f ... =725837387
Search on the in-game Dota 2 arcade for "Dota Classic" to play it.
All the orginal mechanics are there:
*All items fully shareable
*Killing a barracks stops the respective production
*Secret river shop
*Morbazan (secret quest)
*Special exclusive items tied to scourge/sentinel
*Warcraft 3-like corpse system to make the undead-spells work
*Hero-selection tied to factions
*Gold-transfer between players
All original heroes ported, with the exception of four! (they will get ported too, just a bit later)
With the exception of the infravision-dog (coming soon) all items ported, all spells and the old layout.
Some things not completely aligned with the original yet:
*mega-creeps still there (weren't in the original), working on it to remove them
*Leshrac is not a 100% copy, as is Luna's ultimate (working on that)
*Some stats of the neutral creeps and their respawn-timers
*Some damage types could be wrong (magic instead of pure etc. - that's just because so many of them got ported, 28 * 4! Some mistakes are inevitable)
It's not going to be 100% replica in all areas, that's simply impossible given the engine differences, but it's very close. The experience is pretty authentic.
Screenshots, original/replica (sorry for the oversize!)


text:
Bringing trade unions into the Internet age: The first twenty years
It feels like I have been at this for a very long time.
I was introduced to the Internet in 1993 while working as editor of the just-launched quarterly magazine, Workers Education.
We devoted an entire issue of the publication to discussing how workers' education groups and trade unions were beginning to use the new computer communications technology.
The result was a regular column, followed by a full-length book, The Labour Movement and the Internet: The New Internationalism.
And that book led directly to the creation of LabourStart, the news and campaigning website of the international trade union movement.
The rest is
history prologue.


text:
Columbia Slough Fish Advisory
Columbia Slough Fish Advisory
Fish in the Columbia Slough contain polychorinated biphenyls (PCBs) and pesticides. These chemicals may affect human development, reproduction, and immune systems, and may increase your chance of getting cancer.
Who is most at risk?
- Unborn babies
- Pregnant women
- Nursing mothers
- Women of childbearing age
- Children
- People with weakened immune systems, thyroid or liver problems
- People eating slough fish often and for many years
People in these groups should avoid eating resident fish from the Columbia Slough and instead eat migratory fish like salmon and steelhead.
Why are these chemicals a problem?
Even though the concentrations of PCBs and pesticides in slough fish are fairly low, they still pose a health risk because:
- Babies can be exposed to the chemicals before they are born and through breast milk.
- These chemicals accumulate in the body and may cause health problems many years after eating the fish.
What are the health risks of eating slough fish?
Eating fish regularly with these chemicals over time may:
- Harm unborn children - disrupting their development and ability to learn
- Harm reproductive and immune systems
- Increase the risk of cancer
If you choose to eat Columbia Slough fish, you can reduce your health risks by:
- Eating no more than one meal a month. A meal is about the size and thickness
of your hand.
- Eating smaller, younger fish because they have less contaminants
- Eating smaller portions
- Never eating carp, bass and catfish.
Follow these steps:
- Cut off and throw away the head, skin, fatty parts, and guts. PCBs and pesticides build up in these areas.
- Bake or broil the fish (without skin and fat) on a rack so the fat drips off. Drain the fat, do not eat the fat drippings.
- When eating crayfish, eat only the tail and claws.
- Do not eat head and guts of fish or crayfish.
Click here to watch an eight-minute video about catching and eating fish from the Columbia Slough.
Click here to watch a one minute video about the proper way to prepare fish for cooking.
Are there safer places to fish?
Yes, there are many places to fish in Oregon that may be safer to harvest fish from. However, there are fish consumption advisories all over the state. Click here or call 1-877-290-6767 to see if the water you plan to fish has an advisory.
Other Fish Advisories
Harmful chemicals enter rivers and water bodies through storm water running off of roads, parking lots, houses, and lawns. Pollutants also come from business, industry, and farm fields.
Should I stop eating all fish?
No. Fish are good for your heart and brain. Both are low in fat, high in protein, and rich in nutrients like omega-3 fatty acids. Omega-3's provide protection from heart disease and are an important brain food for you, your children, and your unborn child.
Fish consumption guidelines are designed to help you gain these health benefits while protecting you and your family from contaminants found in fish. The key is to make smart choices, and choose fish that are low in mercury, PCBs, and other contaminants. In general, younger, smaller fish have fewer contaminants.
For more ideas on healthy fish preparation, download the What A Catch! Cookbook. (PDF Document 611kb)
For More Information
For health-related questions, contact the Oregon Public Health Division's Office of Environmental Public Health at 1-877-290-6767.
For Smith and Bybee Lake questions, contact Metro at 503-797-1700.
What is the City doing to stop pollution?
Portland's Environmental Services is working with the Oregon Department of Environmental Quality (DEQ) to investigate and eliminate sources of fish contamination in the Columbia Slough.
For several years, Environmental Services has studied contaminants in both the water and sediments of the Columbia Slough. In 2000, Environmental Services finished building the Columbia Slough Combined Sewer Overflow (CSO) projects, which eliminated CSOs to the slough. The city is working on many other projects to improve water quality and fish habitat in the slough. They include:
- Working with businesses to prevent pollution from industrial and commercial facilities
- Stopping unauthorized and illegal discharges to storm sewers
- Installing filters in city storm sewers to remove pollutants
- Stopping soil erosion
- Encouraging homeowners to landscape with native plants and reduce pesticide use
- Building wetlands to filter stormwater
- Extending City sewers to neighborhoods served by septic systems
- Planting native vegetation on the banks of the Columbia Slough to buffer the water from human activity
- Environmental education and outreach to let residents of the Columbia Slough watershed know how they can help keep rivers and streams clean


text:
Documentary puts heartfelt focus on victims but largely shuns tormentors
Rating: PG-13
When: Opens Friday
Where: Landmark Hillcrest,
Running time: 1 hour, 34 minutes
You'd have to be a heartless brute not to be moved by "Bully," Lee Hirsch's documentary that shows the emotional impact of this special breed of adolescent intimidation on its victims and their families. Where many adults look away from the problem, Hirsch points his camera exactly where it hurts the most — at a child's shame, a mother's helplessness, an administrator's obliviousness, a father's grief in the wake of his bullied child's suicide — and captures the emotional complexity that arises when school bullying is allowed to fester.
Hirsch's heart is understandably with the victims, and he gives us a worthy sampling of the collateral damage bullying can cause. We spend time with two families whose sons took their own lives after being pushed to the limit by bullies. We meet Ja'Meya, a 14-year old girl who has just returned home from juvenile detention after pulling a gun on her daily tormentors. We hang out with Kelby, a 16-year-old who was bullied and ostracized by her entire community after coming out as a lesbian.
While these stories are heart-wrenching, if not infuriating, they are shared after the fact by the students and their parents, and Hirsch doesn't bother to back them up with any sort of investigation or corroborating interviews. But it's 12-year-old Alex's story that resonates the most, probably because he was the only student Hirsch was allowed to film where bullying actually occurs — in and around school.
Spending a few days in Alex's shoes is wearying, from the school bus ride where he's regularly threatened and pummeled (these are the scenes that caused most of the uproar with the ratings board, and they have been left intact) to telling his parents about the indignities he suffered that day. You can just about comprehend how a kid might choose suicide at a certain point, especially after Alex mutters, "I'm starting to think I don't feel anything anymore."
It's not hard to spot the system breakdowns that allow these bullying situations to take root. Adolescents aren't exactly known for their ability to accurately communicate something that's bothering them, let alone when it's something they're ashamed of. And even when the parents are as loving and concerned as Alex's, the demands of running a busy household can easily distract them from a problem they probably don't want to face anyway. Which makes it all the more frustrating when they do finally take action and visit Alex's school, only to encounter a maddening wall of bureaucratic indifference.
While Hirsch manages to get the tears flowing and the blood pumping, it's what he doesn't address that keeps "Bully" from living up to its own hype as the catalyst for a national anti-bullying movement. Not once does the film address those who are doing the victimizing or what it is about their lives or our society that seems to drain them of empathy. We witness a few of Alex's bullies get impotent slaps on the wrist for their behavior, but we learn nothing about them — not even if their parents were notified. By ignoring the perpetrators, Hirsch keeps the finger pointed only at the victims and the underfunded, overworked school administrators. In a way it feels like the bullies were yet again let off the hook.
"Bully" is also short on solutions. In fact, it offers nothing beyond the messages of unity and hope carried so sincerely by the fathers of the two boys who took their own lives. Of course, no one's going to argue with the suggestion that we have compassion for each other and stand up to bullies, but if the problem were that easily solved, well, it wouldn't be a problem anymore.
But Hirsch clearly hopes that pulling on your heartstrings will motivate you to visit the film's website, where many tools of change await. As one piece of an entire curriculum, it could be effective. As a stand-alone documentary, it's a flimsy stance to take.


text:
British farm union officials said Tuesday a cull of badgers has begun in a bid to halt the spread of cattle tuberculosis.
The badgers are blamed for spreading the disease to cattle, but opponents say killing badgers is not a sound scientific solution to the problem.
National Farmers' Union President Peter Kendall told farmers in a letter that a "pilot" badger cull had begun in two areas.
"I hope now you will feel that something is finally being done to stem the cycle of infection between cattle and badgers," he told farmers. "We cannot go on culling tens of thousands of cattle every year because of TB while knowing the disease exists in wildlife uncontrolled."
Plans call for about 5,000 badgers to be killed during the six-week program.
Government officials say the cull is needed because of the rapid spread of cattle tuberculosis.
Demonstrators have tried to block the cull. They argue that a vaccine is being developed that would be more effective and humane than killing badgers.
Opponents gathered at "Camp Badger" for a candlelight vigil near one of the cull sites in Somerset, west of London, to call for an end to the cull.
Protester Carla Kidd said opponents are determined to stop the cull before it spreads nationwide.
"We are just normal peaceful people who are outraged," she said.


text:
Crewmembers- Counter or Kitchen
We are currently recruiting for Counter and Kitchen crewmembers.
Counter crewmembers focus on giving exceptional customer service to our guests and taking / fulfilling their orders. Counter crewmembers work the front counter, lobby and drive-thru area of our locations.
Kitchen crewmembers focus on delivering "What We Do" , serving the freshest, never frozen cook-to-order chicken finger meals in a timely manner. At Raising Cane's, we never sacrifice QUALITY for speed.
Raising Cane's "Non-Negotiables" of Service
Raising Cane's appreciates & values individuality. EOE


text:
Nov 06, 2012 | ISBN 9781570618291
"This new volume will delight anyone with an interest in wild Northwest history and the naturalist's adventure. In these elegantly crafted essays, Nisbet guides us beneath the surface of Douglas's narrative, and into deeper questions of plants, people, and place. The journey leaves the reader inspired, challenged, and more attuned to this unique landscape than ever before."
Lyanda Lynn Haupt, author of Crow Planet
"The young David Douglas comes alive with the reading of this incredible thoughtful account, where upon revisiting the exact sites where Douglas collected 199 years ago, the author charmingly describes the species of plants and animals that Douglas encountered. This is a must read for any of us interested in the natural history of the Pacific Northwest."
Estella B. Leopold, Professor Emeritus, University of Washington
"In the era of Internet research and websites galore, a book that can compete with these distractions and absorb readers is indeed a treasure. Nisbet has written just such a book… Under Nisbet's expert hand as researcher and writer, the relatively limited content of the journals unfurls like an opening bloom."
North Columbia Monthly
"The author, Jack Nisbet, is ideally suited to prepare such a volume: his admirable The Collector, David Douglas and the Natural History of the Northwest…captures the excitement European naturalists felt at seeing the impressive flora and fauna of the New World. …those who have some knowledge or interest in the natural history of the northwest—and how the area came to the attention of the British—will find this volume charming. The chapters are short and filled with a wide range of illustrations, from photographs of nature to artifacts from Douglas's day."
Oregon Historical Quarterly
"A beautifully illustrated companion to 'The Collector,' the author's best-selling biography of Douglas that won the 2010 Pacific Northwest Booksellers Award, this volume offers 10 essays that examine the Scottish naturalist's three trips to the Northwest between 1825-1834 and connects them to modern reality."
The Seattle Times
"[David Douglas] is beautifully written, lavishly illustrated with many high-quality full-colour reproductions, and available at a remarkably low price. The book should be welcomed by anyone interested in Douglas. …Nisbet evocatively transports readers back and forth from the natural world that Douglas encountered in the 1820s and 1830s to the same places in the present-day. Those who love the intersection of human history and natural history are in for a treat. Jack Nisbet and Sasquatch Books are to be congratulated for producing such a handsome book."
BC Studies
"The history of the Northwest is rich and vital, and readers interested in the region are well-served by motivated historians and publishers committed to quality books. This season's list is highlighted by another beautifully designed and written book about David Douglas by Jack Nisbet…"
The Oregonian
"I recommend David Douglas, A Naturalist at Work to anyone who is interested in the natural history of the Pacific Northwest, because Douglas' travels marked the start of formal study of plants and animals in this region. His accomplishments are all the more remarkable when you appreciate the challenges of plant preservation, travel, and simply surviving the rugged wilderness that he explored. This book will give you a taste of what it must have been like to be a young botanist in the early 19th century, a life filled with possibilities and discovery."
David L. Peterson, Northwest Science
"Discover the natural history of the Pacific Northwest through the tale of a naturalist who explored the region 200 years ago."
Science News
"As exemplified in David Douglas: A Naturalist at Work, Nisbet's method of interpreting regional history isn't the usual staid recitation of dates and facts. In pursuit of bringing stories nearly 200 years old to life, he walks trails, visits reservations and tribal elders, charters pilot boats, climbs trees and wild-harvests food. His studies may begin by perusing old maps or historical journals in dusty archives, but his curiosity soon has him bounding out the door and into the same landscapes his subjects once roamed… What is noteworthy about his approach—by first reporting, then inhabiting and finally extending these early explorations—is that he actually places himself in direct lineage with the great literary naturalists of America. Nisbet is a modern-day John Muir, climbing to the tops of precarious fir trees to collect cones, and a contemporary of Henry David Thoreau, digging up native camas bulbs in order to taste the earthy fruits of the land."
Cascadia Weekly
"Nisbet writes in detailed but easily read style. Readers learn Douglas could have been killed by a terrifying storm that nearly sank his ship in 1825, about how he interacted with American Indians, about a probable son that he may not have known existed, and about his systematic collection of flora and fauna."
Everett Herald
"'David Douglas, A Naturalist at Work,' makes perceptive connections between people and place, and tantalizing connections across time."
Barbara Lloyd McMichael, The Bookmonger


text:
contact us
recent interviews
FastScripts archive
about ASAP Sports
Our Clients:
Browse by Sport
Find us on
Subscribe to RSS
Click to go to
View our
MLB WORLD SERIES: PHILLIES v RAYS
October 22, 2008
Cole Hamels
Chase Utley
ST. PETERSBURG, FLORIDA: Game One
Q. This is for Chase: Chase, how do you feel about having the bunt go foul and then homering on the same at-bat?
CHASE UTLEY: I guess it turned out pretty well. The third baseman was playing shortstop, I figured with a guy on first and one out, I'd try to create something at that point.
It was foul, but it ended up to turn out pretty good for us.
Q. Chase, can you talk about what it means, being in the World Series, a dream obviously coming true. And your first performance, your first at-bat you do what everyone would like to do, hit a home run, what does that mean to you?
CHASE UTLEY: Obviously it feels pretty good. Our goal was to try to score some runs early. Trying to take the crowd out of it, because they are intense, they are loud. And I thought we did a good job.
And Cole did a wonderful job, again.
Q. Same question for Cole: And you, also, this postseason you seemed to be -- well, you're perfect, obviously, record-wise. Is this the best you've ever pitched in this postseason period?
COLE HAMELS: No. I've done better, obviously, with the first game against Milwaukee. I just had everything in control that game.
This game, because every round you play a better and better team, you definitely have to be a little more focused. You can't screw up as much. And that's what I did with even a couple of pitches out, they were able to capitalize.
But it's just -- with being able to score runs early, it just helps my game out a little bit easier because it, I guess, lessens the pressure and kind of puts me at a point where I can't really do much else but just allow myself to go out there and keep pitching, and these guys will keep scoring runs.
Q. Did you rely more on your change-up tonight? What percentage can you place on how many change-ups you threw out of your pitch count?
COLE HAMELS: No. I went about, I guess, the same way that I've done the past couple of games. Anytime I'm able to go out there and keep them off balance with the fastball or a change-up or a curveball, I don't really count in my head how many times I throw them. But I know that with it being effective I just -- I'm going to keep going out there and doing it until they make that adjustment.
I can't really tell you how many I threw. Most of the time my games are probably half and half.
Q. Cole, how big was the play that Feliz made in the third inning?
COLE HAMELS: That's huge. With the lineup Tampa has, they're very devastating. They can hit the long ball. And that was something I was very aware of, especially with B.J. He's the type of guy that can change a game in an instant. And being able to get that ground-ball out and getting the double play, I think was definitely the kind of momentum swing into our favor for the game, just because if they can load the bases with less than two outs and not be able to score, then you definitely have the upper hand.
Q. Also for Cole: Yesterday you spoke I think about being in the moment and not getting caught up with the idea that it was the World Series. Well, today it is the World Series. Were you able to contain your emotions or did they get the better of you sometimes?
COLE HAMELS: You know, I was. I think going into the game, being somebody else's home turf, the excitement they have with the crowd, you just have to, I guess, take a step back and know that you have a job to do, no matter how loud it gets. And that's what I was able to do. I think I'll still kind of play it slow and easy until the World Series is over, until I really kind of get excited about it, just because that's kind of the mindset I've always had, about playing.
Q. You had time off between the games, how did it affect you? Was it a positive? What did you do to get through that time off?
CHASE UTLEY: Charlie kept us busy. We had a handful of workouts over the past week. Obviously in an ideal world we would like to play a couple of days afterward. But looking back on it, it allowed guys to rest a little bit.
I don't think it threw off our timing too much. I think tomorrow we should definitely be more back on track. But I think we have to hand it to Charlie, he did a good job keeping us going.
Q. On the layoff, because you guys had so many days to think about this game, do you have any sense of relief getting out of here with a win tonight?
CHASE UTLEY: Anytime you can come out with a win, it was positive. I think we did a lot of things right - we had good at-bats, a lot of good base runners. I've said this before, it's better to come up empty with a lot of guys in scoring position than not have any at all.
And again, our pitching staff did an outstanding job.
Q. When Cole's on the mound do you guys feel as a team like it's a game you have to win, there's extra pressure because he pitches so well?
CHASE UTLEY: No, we try not to put any extra pressure on ourselves. The game is hard enough as it is. We do feel confident when Cole is on the mound. You have to ask him, I don't think he had his best stuff tonight, but he kept them off balance enough. He got out of a few jams making some big pitches and that was huge.
Q. Two things, in that at-bat did you see that pitch earlier in that at-bat or a pitch similar to that? This is the second time you've homered in a Game 1, those are pretty big things.
CHASE UTLEY: I try to treat every day the same, whether it's the first day of Spring Training or today. I feel it's easier on yourself to do it that way. No game is bigger than another game. Obviously we came out on top today, but now we have to focus on tomorrow. But obviously coming up with a few homers obviously feels good.
Oh, and the pitch, no, I didn't, for me, the fastball -- the one I hit was in a little bit. So, no.
Q. How often do you see that sort of defensive shift? Do you see it at all?
CHASE UTLEY: Occasionally. Some teams do it more than others. You've got to pick your timing if you're going to try to bunt there. Obviously the more base runners the better. I thought it was a good opportunity to try to get on base.
Q. The pick-off play, what was your take on it? Also, secondly, if you could also address the layoff, too, and how you coped with it?
CHASE UTLEY: I thought it was a great pick-off play.
COLE HAMELS: Yeah, he was out. That's all I can say. Being able to get a guy out, especially on a pick-off play is huge. It puts some momentum back in my shoes.
But the layoff, you know, I think for a starter it's almost better sometimes, just because it gives you more time to heal up. I've had to deal with it the whole postseason; every start I've had leading up to Game 1 I've had about six days off. It wasn't anything new to me. And I think that's a good thing going into the World Series. You don't want anything new.
End of FastScripts
About ASAP Sports
FastScripts Archive
Recent Interviews
Upcoming Events
Contact Us
Events Covered
Our Clients
Other Services
ASAP in the News
Site Map
Job Opportunities
ASAP Sports, Inc.


text:
Sophie Ayers never intended on meeting Louis, yet she...
Breaking Free20294166660
- by directioner04
- Rating:
- Published: 14 Dec 2012
- Updated: 30 Jun 2013
- Status: In Progress
Ever felt smothered by everyone else's idea of what your life should be like? Have you ever just wanted to say "Stop! It's my life!" to those closest to you? We all have, haven't we? I bet you were too afraid to do it though. So you kept your mouth shut, and did exactly what you always told yourself you would never do: you followed the rules set by people who don't really know you, and let THEM control your life. But what could happen if you finally just said no? If you decided to follow your own dream? Would something amazing happen? Would you fall in love? Would you find what you've been looking for your whole life? What could happen if you just...broke free?
Join MovellasFind out what all the buzz is about. Join now to start sharing your creativity and passion
Loading ...


text:
Programming Language Preference
Selenium WebDriver¶
NOTE: We're currently working on documenting these sections. We believe the information here is accurate, however be aware we are also still working on this chapter. Additional information will be provided as we go which should make this chapter more solid.
Introducing WebDriver¶
The primary new feature in Selenium 2.0 is the integration of the WebDriver API. WebDriver is designed to provide a simpler, more concise programming interface in addition to addressing some limitations in the Selenium-RC API. Selenium-WebDriver was developed to better support dynamic web pages where elements of a page may change without the page itself being reloaded. WebDriver's goal is to supply a well-designed object-oriented API that provides improved support for modern advanced web-app testing problems.
How Does WebDriver 'Drive' the Browser Compared to Selenium-RC?¶
Selenium-WebDriver makes direct calls to the browser using each browser's native support for automation. How these direct calls are made, and the features they support depends on the browser you are using. Information on each 'browser driver' is provided later in this chapter.
WebDriver and the Selenium-Server¶
You may, or may not, need the Selenium Server, depending on how you intend to use Selenium-WebDriver. If your browser and tests will all run on the same machine, and your tests only use the WebDriver API, then you do not need to run the Selenium-Server; WebDriver will run the browser directly.
There are some reasons though to use the Selenium-Server with Selenium-WebDriver.
- You are using Selenium-Grid to distribute your tests over multiple machines or virtual machines (VMs).
- You want to connect to a remote machine that has a particular browser version that is not on your current machine.
- You are not using the Java bindings (i.e. Python, C#, or Ruby) and would like to use HtmlUnit Driver
Setting Up a Selenium-WebDriver Project¶
To install Selenium means to set up a project in a development so you can write a program using Selenium. How you do this depends on your programming language and your development environment.
The easiest way to set up a Selenium 2.0 Java project is to use Maven. Maven will download the java bindings (the Selenium 2.0 java client library) and all its dependencies, and will create the project for you, using a maven pom.xml (project configuration) file. Once you've done this, you can import the maven project into your preferred IDE, IntelliJ IDEA or Eclipse.
First, create a folder to contain your Selenium project files. Then, to use Maven, you need a pom.xml file. This can be created with a text editor. We won't teach the details of pom.xml files or for using Maven since there are already excellent references on this. Your pom.xml file will look something like this. Create this file in the folder you created for your project.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
Be sure you specify the most current version. At the time of writing, the version listed above was the most current, however there were frequent releases immediately after the release of Selenium 2.0. Check the Maven download page for the current release and edit the above dependency accordingly.
Now, from a command-line, CD into the project directory and run maven as follows.
mvn clean install
This will download Selenium and all its dependencies and will add them to the project.
Finally, import the project into your preferred development environment. For those not familiar with this, we've provided an appendix which shows this.
Importing a maven project into IntelliJ IDEA. Importing a maven project into Eclipse.
As of Selenium 2.2.0, the C# bindings are distributed as a set of signed dlls along with other dependency dlls. Prior to 2.2.0, all Selenium dll's were unsigned. To include Selenium in your project, simply download the latest selenium-dotnet zip file from http://selenium-release.storage.googleapis.com/index.html. If you are using Windows Vista or above, you should unblock the zip file before unzipping it: Right click on the zip file, click "Properties", click "Unblock" and click "OK".
Unzip the contents of the zip file, and add a reference to each of the unzipped dlls to your project in Visual Studio (or your IDE of choice).
Official NuGet Packages: RC WebDriver WebDriverBackedSelenium Support
If you are using Python for test automation then you probably are already familiar with developing in Python. To add Selenium to your Python environment run the following command from a command-line.
pip install selenium
Pip requires pip to be installed, pip also has a dependency on setuptools.
Teaching Python development itself is beyond the scope of this document, however there are many resources on Python and likely developers in your organization can help you get up to speed.
If you are using Ruby for test automation then you probably are already familiar with developing in Ruby. To add Selenium to your Ruby environment run the following command from a command-line.
gem install selenium-webdriver
Teaching Ruby development itself is beyond the scope of this document, however there are many resources on Ruby and likely developers in your organization can help you get up to speed.
Perl bindings are provided by a third party, please refer to any of their documentation on how to install / get started. There is one known Perl binding as of this writing.
PHP bindings are provided by a third party, please refer to any of their documentation on how to install / get started. There are three known bindings at this time: By Chibimagic By Lukasz Kolczynski and By the Facebook
If you are using node.js to develop your application, the selenium project provides Javascript bindings on npm.
Install the Javascript bindings with npm:
npm install selenium-webdriver
You can find the API docs here.
Migrating from Selenium 1.0¶
For those who already have test suites written using Selenium 1.0, we have provided tips on how to migrate your existing code to Selenium 2.0. Simon Stewart, the lead developer for Selenium 2.0, has written an article on migrating from Selenium 1.0. We've included this as an appendix.
Introducing the Selenium-WebDriver API by Example¶
WebDriver is a tool for automating web application testing, and in particular to verify that they work as expected. It aims to provide a friendly API that's easy to explore and understand, easier to use than the Selenium-RC (1.0) API, which will help to make your tests easier to read and maintain. It's not tied to any particular test framework, so it can be used equally well in a unit testing project or from a plain old "main" method. This section introduces WebDriver's API and helps get you started becoming familiar with it. Start by setting up a WebDriver project if you haven't already. This was described in the previous section, Setting Up a Selenium-WebDriver Project.
Once your project is set up, you can see that WebDriver acts just as any normal library: it is entirely self-contained, and you usually don't need to remember to start any additional processes or run any installers before using it, as opposed to the proxy server with Selenium-RC.
Note: additional steps are required to use ChromeDriver, Opera Driver, Android Driver and iOS Driver
You're now ready to write some code. An easy way to get started is this example, which searches for the term "Cheese" on Google and then outputs the result page's title to the console.
package org.openqa.selenium.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Selenium2Example {
public static void main(String[] args) {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
WebDriver driver = new FirefoxDriver();
// And now use this to visit Google
// Alternatively the same thing can be done like this
// driver.navigate().to("http://www.google.com");
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
// Now submit the form. WebDriver will find the form for us from the element
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getTitle().toLowerCase().startsWith("cheese!");
// Should see: "cheese! - Google Search"
System.out.println("Page title is: " + driver.getTitle());
//Close the browser
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
// Requires reference to WebDriver.Support.dll
using OpenQA.Selenium.Support.UI;
class GoogleSuggest
static void Main(string[] args)
// Create a new instance of the Firefox driver.
// Note that it is wrapped in a using clause so that the browser is closed
// and the webdriver is disposed (even in the face of exceptions).
// Also note that the remainder of the code relies on the interface,
// not the implementation.
// Further note that other drivers (InternetExplorerDriver,
// ChromeDriver, etc.) will require further configuration
// before this example will work. See the wiki pages for the
// individual drivers at http://code.google.com/p/selenium/wiki
// for further information.
using (IWebDriver driver = new FirefoxDriver())
//Notice navigation is slightly different than the Java version
//This is because 'get' is a keyword in C#
// Find the text input element by its name
IWebElement query = driver.FindElement(By.Name("q"));
// Enter something to search for
// Now submit the form. WebDriver will find the form for us from the element
// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(d => d.Title.StartsWith("cheese", StringComparison.OrdinalIgnoreCase));
// Should see: "Cheese - Google Search" (for an English locale)
Console.WriteLine("Page title is: " + driver.Title);
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
# Create a new instance of the Firefox driver
driver = webdriver.Firefox()
# go to the google home page
# the page is ajaxy so the title is originally this:
print driver.title
# find the element that's name attribute is q (the google search box)
inputElement = driver.find_element_by_name("q")
# type in the search
# submit the form (although google automatically searches now without submitting)
# we have to wait for the page to refresh, the last thing that seems to be updated is the title
WebDriverWait(driver, 10).until(EC.title_contains("cheese!"))
# You should see "cheese! - Google Search"
print driver.title
require 'rubygems'
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox
driver.get "http://google.com"
element = driver.find_element :name => "q"
element.send_keys "Cheese!"
puts "Page title is #{driver.title}"
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
wait.until { driver.title.downcase.start_with? "cheese!" }
puts "Page title is #{driver.title}"
var driver = new webdriver.Builder().build();
var element = driver.findElement(webdriver.By.name('q'));
driver.getTitle().then(function(title) {
console.log('Page title is: ' + title);
driver.wait(function() {
return driver.getTitle().then(function(title) {
return title.toLowerCase().lastIndexOf('cheese!', 0) === 0;
}, 3000);
driver.getTitle().then(function(title) {
console.log('Page title is: ' + title);
use Selenium::Remote::Driver;
# Create a new instance of the driver
my $driver = Selenium::Remote::Driver->new;
# Go to the google homepage
# Print original page title
my $title = $driver->get_title();
print "$title\n";
# Find the element that's name attribute is q (google search box)
my $inputElement = $driver->find_element("q", "name");
# type in the search
# submit the form (although google automatically searches now without submitting)
# Set the timeout for searching for elements to 10 seconds (0 by default)
# then use XPath to search for a page title containing cheese!
$driver->find_element("/html/head/title[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'cheese!')]");
# You should see "cheese! - Google Search"
$title = $driver->get_title();
print "$title\n";
In upcoming sections, you will learn more about how to use WebDriver for things such as navigating forward and backward in your browser's history, and how to test web sites that use frames and windows. We also provide a more thorough discussions and examples.
Selenium-WebDriver API Commands and Operations¶
Fetching a Page¶
The first thing you're likely to want to do with WebDriver is navigate to a page. The normal way to do this is by calling "get":
driver.Url = "http://www.google.com";
driver.get "http://www.google.com"
Dependent on several factors, including the OS/Browser combination, WebDriver may or may not wait for the page to load. In some circumstances, WebDriver may return control before the page has finished, or even started, loading. To ensure robustness, you need to wait for the element(s) to exist in the page using Explicit and Implicit Waits.
Locating UI Elements (WebElements)¶
Locating elements in WebDriver can be done on the WebDriver instance itself or on a WebElement. Each of the language bindings exposes a "Find Element" and "Find Elements" method. The former returns a WebElement object matching the query, and throws an exception if such an element cannot be found. The latter returns a list of WebElements, possibly empty if no DOM elements match the query.
The "Find" methods take a locator or query object called "By". "By" strategies are listed below.
By ID¶
This is the most efficient and preferred way to locate an element. Common pitfalls that UI developers make is having non-unique id's on a page or auto-generating the id, both should be avoided. A class on an html element is more appropriate than an auto-generated id.
Example of how to find an element that looks like this:

...

WebElement element = driver.findElement(By.id("coolestWidgetEvah"));
IWebElement element = driver.FindElement(By.Id("coolestWidgetEvah"));
element = driver.find_element(:id, "coolestWidgetEvah")
element = driver.find_element_by_id("coolestWidgetEvah")
from selenium.webdriver.common.by import By
element = driver.find_element(by=By.ID, value="coolestWidgetEvah")
$element = $driver->find_element('coolestWidgetEvah','id')
var element = driver.findElement(By.id('coolestWidgetEvah'));
By Class Name¶
"Class" in this case refers to the attribute on the DOM element. Often in practical use there are many DOM elements with the same class name, thus finding multiple elements becomes the more practical option over finding the first element.
Example of how to find an element that looks like this:

Cheddar

Gouda

List<WebElement> cheeses = driver.findElements(By.className("cheese"));
IList<IWebElement> cheeses = driver.FindElements(By.ClassName("cheese"));
cheeses = driver.find_elements(:class_name, "cheese")
cheeses = driver.find_elements(:class, "cheese")
cheeses = driver.find_elements_by_class_name("cheese")
from selenium.webdriver.common.by import By
cheeses = driver.find_elements(By.CLASS_NAME, "cheese")
@cheeses = $driver->find_elements('cheese', 'class');
.then(cheeses => console.log(cheeses.length));
By Tag Name¶
The DOM Tag Name of the element.
Example of how to find an element that looks like this:

WebElement frame = driver.findElement(By.tagName("iframe"));
IWebElement frame = driver.FindElement(By.TagName("iframe"));
frame = driver.find_element(:tag_name, "iframe")
frame = driver.find_element_by_tag_name("iframe")
from selenium.webdriver.common.by import By
frame = driver.find_element(By.TAG_NAME, "iframe")
$frame = $driver->find_element('iframe', 'tag_name');
var frame = driver.findElement(By.tagName('iframe'));
By Name¶
Find the input element with matching name attribute.
Example of how to find an element that looks like this:
<input name="cheese" type="text"/>
WebElement cheese = driver.findElement(By.name("cheese"));
IWebElement cheese = driver.FindElement(By.Name("cheese"));
cheese = driver.find_element(:name, "cheese")
cheese = driver.find_element_by_name("cheese")
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.NAME, "cheese")
$cheese = $driver->find_element('cheese', 'name');
var cheese = driver.findElement(By.name('cheese'));
By Link Text¶
Find the link element with matching visible text.
Example of how to find an element that looks like this:
cheese>
WebElement cheese = driver.findElement(By.linkText("cheese"));
IWebElement cheese = driver.FindElement(By.LinkText("cheese"));
cheese = driver.find_element(:link_text, "cheese")
cheese = driver.find_element(:link, "cheese")
cheese = driver.find_element_by_link_text("cheese")
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.LINK_TEXT, "cheese")
$cheese = $driver->find_element('cheese', 'link_text');
var cheese = driver.findElement(By.linkText('cheese'));
By Partial Link Text¶
Find the link element with partial matching visible text.
Example of how to find an element that looks like this:
search for cheese>
WebElement cheese = driver.findElement(By.partialLinkText("cheese"));
IWebElement cheese = driver.FindElement(By.PartialLinkText("cheese"));
cheese = driver.find_element(:partial_link_text, "cheese")
cheese = driver.find_element_by_partial_link_text("cheese")
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.PARTIAL_LINK_TEXT, "cheese")
$cheese = $driver->find_element('cheese', 'partial_link_text');
var cheese = driver.findElement(By.partialLinkText('cheese'));
By CSS¶
Like the name implies it is a locator strategy by css. Native browser support is used by default, so please refer to w3c css selectors for a list of generally available css selectors. If a browser does not have native support for css queries, then Sizzle is used. IE 6,7 and FF3.0 currently use Sizzle as the css query engine.
Beware that not all browsers were created equal, some css that might work in one version may not work in another.
Example of to find the cheese below:

milkcheese

WebElement cheese = driver.findElement(By.cssSelector("#food span.dairy.aged"));
IWebElement cheese = driver.FindElement(By.CssSelector("#food span.dairy.aged"));
cheese = driver.find_element(:css, "#food span.dairy.aged")
cheese = driver.find_element_by_css_selector("#food span.dairy.aged")
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.CSS_SELECTOR, "#food span.dairy.aged")
$cheese = $driver->find_element('#food span.dairy.aged', 'css');
var cheese = driver.findElement(By.css('#food span.dairy.aged'));
By XPath¶
At a high level, WebDriver uses a browser's native XPath capabilities wherever possible. On those browsers that don't have native XPath support, we have provided our own implementation. This can lead to some unexpected behaviour unless you are aware of the differences in the various XPath engines.
|Tag and Attribute Name
|Attribute Values
|Native XPath Support
|HtmlUnit Driver
|As they appear in the HTML
|Internet Explorer Driver
|As they appear in the HTML
|Firefox Driver
|Case insensitive
|As they appear in the HTML
This is a little abstract, so for the following piece of HTML:
<input type="text" name="example" />
<INPUT type="text" name="other" />
List<WebElement> inputs = driver.findElements(By.xpath("//input"));
IList<IWebElement> inputs = driver.FindElements(By.XPath("//input"));
inputs = driver.find_elements(:xpath, "//input")
inputs = driver.find_elements_by_xpath("//input")
from selenium.webdriver.common.by import By
inputs = driver.find_elements(By.XPATH, "//input")
@inputs = $driver->find_elements('//input')
.then(cheeses => console.log(cheeses.length));
The following number of matches will be found
|XPath expression
|HtmlUnit Driver
|Firefox Driver
|Internet Explorer Driver
|1 ("example")
Sometimes HTML elements do not need attributes to be explicitly declared because they will default to known values. For example, the "input" tag does not require the "type" attribute because it defaults to "text". The rule of thumb when using xpath in WebDriver is that you should not expect to be able to match against these implicit attributes.
Using JavaScript¶
You can execute arbitrary javascript to find an element and as long as you return a DOM Element, it will be automatically converted to a WebElement object.
Simple example on a page that has jQuery loaded:
WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('.cheese')[0]");
IWebElement element = (IWebElement) ((IJavaScriptExecutor)driver).ExecuteScript("return $('.cheese')[0]");
element = driver.execute_script("return $('.cheese')[0]")
element = driver.execute_script("return $('.cheese')[0]")
element = $driver->execute_script("return $('.cheese')[0]");
Finding all the input elements for every label on a page:
List<WebElement> labels = driver.findElements(By.tagName("label"));
List<WebElement> inputs = (List<WebElement>) ((JavascriptExecutor)driver).executeScript(
"var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +
"inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels);
IList<IWebElement> labels = driver.FindElements(By.TagName("label"));
IList<IWebElement> inputs = (IList<IWebElement>) ((IJavaScriptExecutor)driver).ExecuteScript(
"var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +
"inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels);
labels = driver.find_elements(:tag_name, "label")
inputs = driver.execute_script(
"var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +
"inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels)
labels = driver.find_elements_by_tag_name("label")
inputs = driver.execute_script(
"var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +
"inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels)
my @labels = $driver->find_elements('label', 'tag_name');
my $inputs = $driver->execute_script("var labels = arguments, inputs = []; for (var i=0; i < labels.length; i++){ inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", @labels);
Getting text values¶
People often wish to retrieve the innerText value contained within an element. This returns a single string value. Note that this will only return the visible text displayed on the page.
WebElement element = driver.findElement(By.id("elementID"));
IWebElement element = driver.findElement(By.id("elementID"));
element = driver.find_element :id => "element_id"
element = driver.find_element_by_id("element_id")
var element = driver.findElement(By.id('elementID'));
element.getText().then(text => console.log(`Text is ${text}`));
User Input - Filling In Forms¶
We've already seen how to enter text into a textarea or text field, but what about the other elements? You can "toggle" the state of checkboxes, and you can use "click" to set something like an OPTION tag selected. Dealing with SELECT tags isn't too bad:
WebElement select = driver.findElement(By.tagName("select"));
List<WebElement> allOptions = select.findElements(By.tagName("option"));
for (WebElement option : allOptions) {
System.out.println(String.format("Value is: %s", option.getAttribute("value")));
IWebElement select = driver.FindElement(By.TagName("select"));
IList<IWebElement> allOptions = select.FindElements(By.TagName("option"));
foreach (IWebElement option in allOptions)
Console.WriteLine("Value is: " + option.GetAttribute("value"));
select = driver.find_element(:tag_name, "select")
all_options = select.find_elements(:tag_name, "option")
all_options.each do |option|
puts "Value is: " + option.attribute("value")
select = driver.find_element_by_tag_name("select")
allOptions = select.find_elements_by_tag_name("option")
for option in allOptions:
print "Value is: " + option.get_attribute("value")
$select = $driver->find_element('select', 'tag_name');
@allOptions = $driver->find_child_element($select, "option", 'tag_name');
foreach $option (@allOptions){
print "Value is: ".$option->get_attribute("value")."\n";
This will find the first "SELECT" element on the page, and cycle through each of its OPTIONs in turn, printing out their values, and selecting each in turn. As you will notice, this isn't the most efficient way of dealing with SELECT elements. WebDriver's support classes include one called "Select", which provides useful methods for interacting with these.
Select select = new Select(driver.findElement(By.tagName("select")));
SelectElement select = new SelectElement(driver.FindElement(By.TagName("select")));
# available since 2.14
select = Selenium::WebDriver::Support::Select.new(driver.find_element(:tag_name, "select"))
select.select_by(:text, "Edam")
# available since 2.12
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_tag_name("select"))
This will deselect all OPTIONs from the first SELECT on the page, and then select the OPTION with the displayed text of "Edam".
Once you've finished filling out the form, you probably want to submit it. One way to do this would be to find the "submit" button and click it:
driver.find_element(:id, "submit").click
Alternatively, WebDriver has the convenience method "submit" on every element.
If you call this on an element within a form, WebDriver will walk up the DOM
until it finds the enclosing form and then calls submit on that. If the
element isn't in a form, then the
NoSuchElementException will be thrown:
Moving Between Windows and Frames¶
Some web applications have many frames or multiple windows. WebDriver supports moving between named windows using the "switchTo" method:
All calls to
driver will now be interpreted as being directed to the
particular window. But how do you know the window's name? Take a look at the
javascript or link that opened it:
Click here to open a new window
Alternatively, you can pass a "window handle" to the "switchTo().window()" method. Knowing this, it's possible to iterate over every open window like so:
for (String handle : driver.getWindowHandles()) {
foreach (string handle in driver.WindowHandles) {
driver.window_handles.each do |handle|
driver.switch_to.window handle
for handle in driver.window_handles:
$windows = $driver->get_window_handles()
foreach $window (@$windows){
You can also switch from frame to frame (or into iframes):
driver.switch_to.frame "frameName"
Popup Dialogs¶
Starting with Selenium 2.0 beta 1, there is built in support for handling popup dialog boxes. After you've triggered an action that opens a popup, you can access the alert with the following:
Alert alert = driver.switchTo().alert();
Alert alert = driver.SwitchTo().Alert();
alert = driver.switch_to.alert
alert = driver.switch_to.alert
# usage: alert.dismiss(), etc.
var alert = driver.switchTo().alert();
This will return the currently open alert object. With this object you can now accept, dismiss, read its contents or even type into a prompt. This interface works equally well on alerts, confirms, and prompts. Refer to the JavaDocs or RubyDocs for more information.
Changing the User Agent¶
This is easy with the Firefox Driver:
FirefoxProfile profile = new FirefoxProfile();
profile.addAdditionalPreference("general.useragent.override", "some UA string");
WebDriver driver = new FirefoxDriver(profile);
var profile = new FirefoxProfile();
profile.SetPreference("general.useragent.override", "some UA string");
IWebDriver driver = new FirefoxDriver(profile);
profile = Selenium::WebDriver::Firefox::Profile.new
profile['general.useragent.override'] = "some UA string"
driver = Selenium::WebDriver.for :firefox, :profile => profile
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "some UA string")
driver = webdriver.Firefox(profile)
use Selenium::Remote::Driver::Firefox::Profile;
my $profile = Selenium::Remote::Driver::Firefox::Profile->new;
$profile->set_preference('general.useragent.overide' => "some UA string");
my $driver = Selenium::Remote::Driver->new('firefox_profile' => $profile);
Drag And Drop¶
Here's an example of using the Actions class to perform a drag and drop. Native events are required to be enabled.
WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();
IWebElement element = driver.FindElement(By.Name("source"));
IWebElement target = driver.FindElement(By.Name("target"));
(new Actions(driver)).DragAndDrop(element, target).Perform();
element = driver.find_element(:name => 'source')
target = driver.find_element(:name => 'target')
driver.action.drag_and_drop(element, target).perform
from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element_by_name("source")
target = driver.find_element_by_name("target")
ActionChains(driver).drag_and_drop(element, target).perform()
Driver Specifics and Tradeoffs¶
Selenium-WebDriver's Drivers¶
WebDriver is the name of the key interface against which tests should be written, but there are several implementations. These include:
HtmlUnit Driver¶
This is currently the fastest and most lightweight implementation of WebDriver. As the name suggests, this is based on HtmlUnit. HtmlUnit is a java based implementation of a WebBrowser without a GUI. For any language binding (other than java) the Selenium Server is required to use this driver.
WebDriver driver = new HtmlUnitDriver();
IWebDriver driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"),
driver = webdriver.Remote("http://localhost:4444/wd/hub", webdriver.DesiredCapabilities.HTMLUNIT.copy())
driver = Selenium::WebDriver.for :remote, :url => "http://localhost:4444/wd/hub", :desired_capabilities => :htmlunit
my $driver = Selenium::Remote::Driver->new(browser_name => 'htmlunit', remote_server_addr => 'localhost', port => '4444');
- Fastest implementation of WebDriver
- A pure Java solution and so it is platform independent.
- Supports JavaScript
JavaScript in the HtmlUnit Driver¶
Enabling JavaScript¶
If you can't wait, enabling JavaScript support is very easy:
HtmlUnitDriver driver = new HtmlUnitDriver(true);
WebDriver driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"),
driver = Selenium::WebDriver.for :remote, :url => "http://localhost:4444/wd/hub", :desired_capabilities => caps
driver = webdriver.Remote("http://localhost:4444/wd/hub", webdriver.DesiredCapabilities.HTMLUNITWITHJS)
This will cause the HtmlUnit Driver to emulate Firefox 3.6's JavaScript handling by default.
Firefox Driver¶
Controls the Firefox browser using a Firefox plugin. The Firefox Profile that is used is stripped down from what is installed on the machine to only include the Selenium WebDriver.xpi (plugin). A few settings are also changed by default (see the source to see which ones) Firefox Driver is capable of being run and is tested on Windows, Mac, Linux. Currently on versions 3.6, 10, latest - 1, latest
WebDriver driver = new FirefoxDriver();
IWebDriver driver = new FirefoxDriver();
driver = webdriver.Firefox()
driver = Selenium::WebDriver.for :firefox
my $driver = Selenium::Remote::Driver->new;
- Faster than the Internet Explorer Driver
- Slower than the HtmlUnit Driver
Modifying the Firefox Profile¶
Suppose that you wanted to modify the user agent string (as above), but you've
got a tricked out Firefox profile that contains dozens of useful extensions.
There are two ways to obtain this profile. Assuming that the profile has been
created using Firefox's profile manager (
firefox -ProfileManager):
ProfilesIni allProfiles = new ProfilesIni();
FirefoxProfile profile = allProfiles.getProfile("WebDriver");
profile.setPreferences("foo.bar", 23);
WebDriver driver = new FirefoxDriver(profile);
var profileManager = new FirefoxProfileManager();
FirefoxProfile profile = profileManager.GetProfile("WebDriver");
profile.SetPreference("foo.bar", 23);
IWebDriver driver = new FirefoxDriver(profile);
Alternatively, if the profile isn't already registered with Firefox:
File profileDir = new File("path/to/top/level/of/profile");
FirefoxProfile profile = new FirefoxProfile(profileDir);
WebDriver driver = new FirefoxDriver(profile);
FirefoxProfile profile = new FirefoxProfile("path/to/top/level/of/profile");
profile.SetPreference("extra", "pref");
IWebDriver driver = new FirefoxDriver(profile);
As we develop features in the Firefox Driver, we expose the ability to use them. For example, until we feel native events are stable on Firefox for Linux, they are disabled by default. To enable them:
FirefoxProfile profile = new FirefoxProfile();
WebDriver driver = new FirefoxDriver(profile);
var profile = new FirefoxProfile {EnableNativeEvents = true};
IWebDriver driver = new FirefoxDriver(profile);
profile = webdriver.FirefoxProfile()
profile.native_events_enabled = True
driver = webdriver.Firefox(profile)
profile = Selenium::WebDriver::Firefox::Profile.new
profile.native_events = true
driver = Selenium::WebDriver.for :firefox, :profile => profile
See the Firefox section in the wiki page for the most up to date info.
Internet Explorer Driver¶
The InternetExplorerDriver is a standalone server which implements WebDriver's wire protocol. This driver has been tested with IE 7, 8, 9, 10, and 11 on appropriate combinations of Vista, Windows 7, Windows 8, and Windows 8.1. As of 15 April 2014, IE 6 is no longer supported.
The driver supports running 32-bit and 64-bit versions of the browser. The choice of how to determine which "bit-ness" to use in launching the browser depends on which version of the IEDriverServer.exe is launched. If the 32-bit version of IEDriverServer.exe is launched, the 32-bit version of IE will be launched. Similarly, if the 64-bit version of IEDriverServer.exe is launched, the 64-bit version of IE will be launched.
WebDriver driver = new InternetExplorerDriver();
IWebDriver driver = new InternetExlorerDriver();
driver = webdriver.Ie()
driver = Selenium::WebDriver.for :ie
my $driver = Selenium::Remote::Driver->new(browser_name => 'internet explorer');
- Obviously the InternetExplorerDriver will only work on Windows!
- Comparatively slow (though still pretty snappy!)
See the Internet Explorer section of the wiki page for the most up to date info. Please take special note of the Required Configuration section.
ChromeDriver is maintained / supported by the Chromium project iteslf. WebDriver works with Chrome through the chromedriver binary (found on the chromium project's download page). You need to have both chromedriver and a version of chrome browser installed. chromedriver needs to be placed somewhere on your system's path in order for WebDriver to automatically discover it. The Chrome browser itself is discovered by chromedriver in the default installation path. These both can be overridden by environment variables. Please refer to the wiki for more information.
WebDriver driver = new ChromeDriver();
IWebDriver driver = new ChromeDriver();
driver = webdriver.Chrome()
driver = Selenium::WebDriver.for :chrome
my $driver = Selenium::Remote::Driver->new(browser_name => 'chrome');
- Slower than the HtmlUnit Driver
See our wiki for the most up to date info. More info can also be found on the downloads page
Getting running with ChromeDriver¶
Download the ChromeDriver executable and follow the other instructions on the wiki page
Opera Driver¶
See the Opera Driver wiki article in the Selenium Wiki for information on using the Opera Driver.
iOS Driver¶
See either the ios-driver or appium projects.
Android Driver¶
See the Selendroid project
Alternative Back-Ends: Mixing WebDriver and RC Technologies¶
WebDriver-Backed Selenium-RC¶
The Java version of WebDriver provides an implementation of the Selenium-RC API. These means that you can use the underlying WebDriver technology using the Selenium-RC API. This is primarily provided for backwards compatibility. It allows those who have existing test suites using the Selenium-RC API to use WebDriver under the covers. It's provided to help ease the migration path to Selenium-WebDriver. Also, this allows one to use both APIs, side-by-side, in the same test code.
Selenium-WebDriver is used like this:
// You may use any WebDriver implementation. Firefox is used here as an example
WebDriver driver = new FirefoxDriver();
// A "base url", used by selenium to resolve relative URLs
String baseUrl = "http://www.google.com";
// Create the Selenium implementation
Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);
// Perform actions with selenium
selenium.type("name=q", "cheese");
// Get the underlying WebDriver implementation back. This will refer to the
// same WebDriver instance as the "driver" variable above.
WebDriver driverInstance = ((WebDriverBackedSelenium) selenium).getWrappedDriver();
//Finally, close the browser. Call stop on the WebDriverBackedSelenium instance
//instead of calling driver.quit(). Otherwise, the JVM will continue running after
//the browser has been closed.
- Allows for the WebDriver and Selenium APIs to live side-by-side
- Provides a simple mechanism for a managed migration from the Selenium RC API to WebDriver's
- Does not require the standalone Selenium RC server to be run
- Does not implement every method
- Some methods may be slower due to underlying implementation differences
Backing WebDriver with Selenium¶
WebDriver doesn't support as many browsers as Selenium RC does, so in order to
provide that support while still using the WebDriver API, you can make use of
Safari is supported in this way with the following code (be sure to disable pop-up blocking):
DesiredCapabilities capabilities = new DesiredCapabilities();
CommandExecutor executor = new SeleneseCommandExecutor(new URL("http://localhost:4444/"), new URL("http://www.google.com/"), capabilities);
WebDriver driver = new RemoteWebDriver(executor, capabilities);
Running Standalone Selenium Server for use with RemoteDrivers¶
From Selenium's Download page download selenium-server-standalone-<version>.jar and optionally IEDriverServer. If you plan to work with Chrome, download it from Google Code.
Unpack IEDriverServer and/or chromedriver and put them in a directory which is on the $PATH / %PATH% - the Selenium Server should then be able to handle requests for IE / Chrome without additional modifications.
Start the server on the command line with
java -jar <path_to>/selenium-server-standalone-<version>.jar
If you want to use native events functionality, indicate this on the command line with the option
For other command line options, execute
java -jar <path_to>/selenium-server-standalone-<version>.jar -help
In order to function properly, the following ports should be allowed incoming TCP connections: 4444, 7054-5 (or twice as many ports as the number of concurrent instances you plan to run). Under Windows, you may need to unblock the applications as well.
Additional Resources¶
You can find further resources for WebDriver in WebDriver's wiki
Of course, don't hesitate to do an internet search on any Selenium topic, including Selenium-WebDriver's drivers. There are quite a few blogs on Selenium along with numerous posts on various user forums. Additionally the Selenium User's Group is a great resource. http://groups.google.com/group/selenium-users
Next Steps¶
This chapter has simply been a high level walkthrough of WebDriver and some of its key capabilities. Once getting familiar with the Selenium-WebDriver API you will then want to learn how to build test suites for maintainability, extensibility, and reduced fragility when features of the AUT frequently change. The approach most Selenium experts are now recommending is to design your test code using the Page Object Design Pattern along with possibly a Page Factory. Selenium-WebDriver provides support for this by supplying a PageFactory class in Java and C#. This is presented, along with other advanced topics, in the next chapter. Also, for high-level description of this technique, you may want to look at the Test Design Considerations chapter. Both of these chapters present techniques for writing more maintainable tests by making your test code more modular.


text:
Colombia's Indians take justice into their own hands
Issued on: Modified:
We head deep into Colombia's Cauca mountain range, where members of the indigenous Nasa community are demanding that both security forces and FARC guerrillas stay off their land. Next, gay rights activists in the United States hold 'kiss-ins' outside Chick-Fil-A chicken restaurants to protest against the company chairman's strong opposition to same-sex marriage.
Finally, NASA is flying high after the successful landing of its Curiosity spacecraft on Mars. The beleaguered space agency faces huge budget cuts, but is hoping Curiosity's success will help keep the federal funds flowing.


text:
RAW Tree Care are professional tree surgeons covering all aspects of tree surgery in Albrighton and the surrounding areas
Our professional staff are fully trained and NPTC qualified working to BS3998 relating to tree work. We hold £5 million of public liability insurance for your piece of mind.
At RAW Tree Care we pride ourselves on high quality work, great efficiency, leaving happy customers and above all we but safety first.
We specialise in all aspects of Tree Surgery, Tree Removal, hedge trimming, stump grinding, woodland management and provide logs and woodchip throughout Albrighton and the surrounding areas.
All our quotes are provided free of charge and we will not pressure you into any decision
Contact us now for a FREE no obligation quotation
RAW Tree Care provide tree surgery and arboriculture services to the following areas
Albrighton ~ Birmingham ~ Cannock ~ Codsall & Billbrook ~
Compton ~ Dudley ~ Kingswinford ~ Pendeford ~ Penn ~
Perton ~ Sandwell ~ Shifnal ~ Solihull ~ Stourbridge ~ Telford ~
Tettenhall ~ Walsall ~ Wolverhampton ~ Wombourne