markdown 使用php webdriver(facebook / webdriver)的备忘单。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 使用php webdriver(facebook / webdriver)的备忘单。相关的知识,希望对你有一定的参考价值。

### Webdriver PHP API workthough

*	Open a browser
	
		# start an instance of firefox with selenium-webdriver
		
		$browser_type = 'firefox'
		$host = 'http://localhost:4444/wd/hub'

		$capabilities = array(\WebDriverCapabilityType::BROWSER_NAME => $browser_type);
		$driver = RemoteWebDriver::create($host, $capabilities);
		
		$browser_type
		# :firefox => firefox
		# :chrome  => chrome
		# :ie      => iexplore

*	Go to a specified URL

		$driver->get('http://google.com');
		$driver->navigate()->to('http://google.com');
		
	'NOTE' -- the WebDriver may not wait for the page to load, you'd better using explicit and implicit waits.

*	Locating Elements

	*	'findElement(WebDriverBy $by)' -- Find the first element matching the given arguments.
	
	*	'findElements(WebDriverBy $by)' -- Find all elements matching the given arguments

	*   'WebDriverBy' -- Class with static methods for selecting elements using different mechanisms.

	    *   'WebDriverBy
	        *  'class name'
            *  'css selector'
            *  'id'
            *  'name'
            *  'link text'
            *  'partial link text'
            *  'tag name'
            *  'xpath'

	*	Finding Element By ID

			# example html
			# <input id="q">...</input>
				
			$element = $driver->findElement(WebDriverBy::id("q"));
		
	*	By Class Name
	
			# example html
			# <div class="highlight-java" style="display: none; ">...</div>

			$element = $driver->findElement(WebDriverBy::className('highlight-java'));
		
	*	By Tag Name
			
			# example html
			# <div class="highlight-java" style="display: none; ">...</div>
			
			$element = $driver->findElement(WebDriverBy::tagName("div"));
			
	*	By Name
			
			# example html
			# <input id="q" name='search' type='text'>…</input>
			
		    $element = $driver->findElement(WebDriverBy::name('search'));

	*	By Link Text
			
			# example html
			# <a href="http://www.google.com/search?q=cheese">cheese</a>
			
			$element = $driver->findElement(WebDriverBy::linkText("cheese"));

	*	By Partial Link Text
	
			# example html
			# <a href="http://www.google.com/search?q=cheese">search for cheese</a>

			$element = $driver->findElement(WebDriverBy::partialLinkText("chee"));

	*	By XPath
	
			# example html
			# <ul class="dropdown-menu">
            #   <li><a href="/login/form">Login</a></li>
            #   <li><a href="/logout">Logout</a></li>
            # </ul>
  			
			$element = $driver->findElement(WebDriverBy::xpath('//a[@href='/logout']'));
			
		*	`NOTE` -- When using Element#findElement with `WebDriverBy::xpath`, be aware that,
	
			*	 webdriver follows standard conventions: a search prefixed with "//" will search the entire document, not just the children of this current node. 
			*	Use ".//" to limit your search to the children of the receiving Element.
			
	* By CSS Selector
	
			# example html
			# <div id="food">
			#   <span class="dairy">milk</span>
			#   <span class="dairy aged">cheese</span>
			# </div>

			$element = $driver->findElement(WebDriverBy::cssSelector('#food span.dairy'));

*	Element's operation

	*	Button/Link/Image

			$element = $driver->findElement(WebDriverBy::id('BUTTON_ID'))->click();
	
	*	Text Field
	
			# input some text
			$driver->findElement(WebDriverBy::id('BUTTON_ID'))->click();
			$driver->getKeyboard()->sendKeys('InputText');

			# send keyboard actions, press `cmd+a` & `delete`
            $driver->getKeyboard()
              ->sendKeys(array(
                WebDriverKeys::COMMAND, // Use control on non-mac computers.
                'a',
              ));

            $driver->getKeyboard()
              ->sendKeys(array(
                WebDriverKeys::BACKSPACE,
              ));

        *'Note' -- /RemoteWebElement->clear() will clear text from a textarea or a text input.

	*	Checkbox/Radio
	
			# check if it is selected
			$driver->findElement(WebDriverBy::id('CheckBox'))->isSelected();

			# select the element
			$driver->findElement(WebDriverBy::id('CheckBox'))->click();

			# deselect the element
			$driver->findElement(WebDriverBy::id('CheckBox'))->clears();
	
	*	Select
	
			# get the select element	
			$select = $driver->findElement(WebDriverBy::tagName('select'));

			# get all the options for this element
			$allOptions = $select->findElement(WebDriverBy::tagName('option'));

			# select the options
			foreach ($allOptions as $option) {
			  echo "Value is:" . $option->getAttribute('value);
			  $option->click();
			}

	*	visibility
			
			$driver->findElement(WebDriverBy::id('element'))->isDisplayed();
			
	*	get text
				
			$driver->findElement(WebDriverBy::id('element'))->getText();
	
	*	get attribute
			
			$driver->findElement(WebDriverBy::id('element'))->getAttribute('class');
			
*	Driver's operation

	* execute javascript

			$driver->executeScript("return window.location.pathname");

	* wait for a specific element to show up
			
			# set the timeout to 20 seconds, and the time in interval to 1000 ms

            $driver->wait(20, 1000)->until(
                WebDriverExpectedCondition::titleIs('WebDriver Page')
            );

	
	* implicit waits

	An implicit wait is to tell WebDriver to poll the DOM for a certain amount of time when trying to find an element or elements if they are not immediately available
	
			# set the timeout for implicit waits as 10 seconds
			$driver->manage()->timeouts()->implicitlyWait = 10
			
			$driver->get("http://somedomain/url_that_delays_loading");
			$element = $driver->findElement(WebDriverBy::id('some-dynamic-element'));

	* switch between frames
	
			# switch to an iframe
			$driver->switchTo()->frame(/WebDriverElement('the id or the name of the frame"some-frame" # name or id'));

			# switch back to the main document
			$driver->switchTo()->defaultContent();
				
	* swich between windows
	
			#TODO: Add examples.
			
	* handle javascript dialog
		
			# get the alert

			$a = $driver->switchTo->alert();

			# operation on the alert

			if ($a->getText == 'A value you are looking for') {
			  a->dismiss();
			}
			else {
			  a->accept();
			}

* Cookies
	
	* Delete cookies
	
			# You can delete cookies in 2 ways
			# By name
			$driver->manage()->deleteCookieNamed('CookieName');

			# Or all of them
			$driver->manage()->deleteAllCookies();

以上是关于markdown 使用php webdriver(facebook / webdriver)的备忘单。的主要内容,如果未能解决你的问题,请参考以下文章

markdown Selenium Webdriver CheatSheet

Php-webdriver 的安装与使用教程

Php-webdriver 的安装与使用教程

如何在Firefox 58 ++上使用适用于Selenium的PHP Webdriver下载文件

如何使用PHP绑定设置Selenium(WebDriver和Server)

如何在 Firefox 58++ 上使用 PHP Webdriver for Selenium 下载文件