1: <?php
2: namespace Azalea\Selenium\Toolkit;
3:
4: class SeleniumTestCase extends \PHPUnit_Extensions_Selenium2TestCase
5: {
6: protected $base_url = NULL;
7: protected static $tags = array();
8: public static $browsers = array();
9:
10: 11: 12:
13: public static function browsers()
14: {
15: $browsers = array();
16: $config = explode(";", $_ENV['selenium_browsers']);
17: foreach($config as $browser) {
18:
19: $parts = explode("|", $browser);
20: $name = $parts[0];
21: $version = $parts[1];
22: $platform = $parts[2];
23:
24: $browsers[] = array(
25: 'browserName' => $name,
26: 'desiredCapabilities' => array(
27: 'platform' => $platform,
28: 'version' => $version
29: ),
30: 'local' => (isset($parts[3]) ? true : false)
31: );
32: }
33: return $browsers;
34: }
35:
36: 37: 38:
39: public function setUp()
40: {
41: if (isset($_ENV['selenium_base_url'])) {
42: $this->base_url = $_ENV['selenium_base_url'];
43: $this->setBrowserUrl($this->base_url);
44: }
45:
46: if(isset($_ENV['selenium_host'])) {
47: $this->setHost($_ENV['selenium_host']);
48:
49: if(isset($_ENV['selenium_port'])) {
50: $this->setPort((int)$_ENV['selenium_port']);
51: }
52: }
53:
54: if (isset($_ENV['selenium_browsers'])) {
55: $config = explode(";", $_ENV['selenium_browsers']);
56: $parts = explode("|", $config[0]);
57: $this->setBrowser($parts[0]);
58: } else {
59: $this->setBrowser("chrome");
60: }
61:
62: parent::setUp();
63:
64: $this->setMetaData();
65: }
66:
67: 68: 69: 70: 71: 72: 73:
74: protected function buildUrl($url)
75: {
76: if ($url !== NULL && $this->base_url !== NULL && !preg_match("/^https?:/", $url)) {
77: if (strlen($url) && $url[0] == '/') {
78: $sep = '';
79: } else {
80: $sep = '/';
81: }
82: $url = trim($this->base_url, '/').$sep.$url;
83: }
84: return $url;
85: }
86:
87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
97: public function url($url = NULL)
98: {
99: return parent::url($this->buildUrl($url));
100: }
101:
102: 103: 104: 105: 106: 107: 108:
109: public function setBrowserUrl($url = '')
110: {
111: return parent::setBrowserUrl($this->buildUrl($url));
112: }
113:
114: 115: 116: 117: 118: 119:
120: protected function setMetaData()
121: {
122:
123: $caps = $this->getDesiredCapabilities();
124:
125: if (isset($_ENV['selenium_meta_tags']) && !empty($_ENV['selenium_meta_tags'])) {
126: $caps['tags'] = explode(",", $_ENV['selenium_meta_tags']);
127: $caps['tags'] = array_merge($caps['tags'], static::$tags);
128: }
129:
130: if (isset($_ENV['selenium_meta_public']) && !empty($_ENV['selenium_meta_public'])) {
131: $caps['public'] = $_ENV['selenium_meta_public'];
132: }
133:
134: $caps['custom-data'] = (isset($caps['custom-data'])) ? $caps['custom-data'] : array();
135: $caps['custom-data']['url'] = $this->base_url;
136: $caps['custom-data']['debug'] = (isset($_ENV['selenium_debug']) ? $_ENV['selenium_debug'] : false);
137:
138:
139: $this->setDesiredCapabilities($caps);
140: }
141:
142: 143: 144: 145: 146: 147: 148: 149:
150: public function isTextPresent($text, $element = NULL)
151: {
152: $element = $element ? $element : $this->byCssSelector('body');
153: $el_text = str_replace("\n", " ", $element->text());
154: return strpos($el_text, $text) !== false;
155: }
156:
157: 158: 159:
160: public function waitForText($text, \PHPUnit_Extensions_Selenium2TestCase_Element $element = NULL,
161: $timeout = 10)
162: {
163: $test = function() use ($element, $text) {
164: $el_text = $element ? $element->text() : $this->byCssSelector('body')->text();
165: $el_text = str_replace("\n", " ", $el_text);
166: return strpos($el_text, $text) !== false;
167: };
168: $this->spinWait("Text $text never appeared!", $test, array(), $timeout);
169: }
170:
171: 172: 173:
174: public function assertTextPresent($text, \PHPUnit_Extensions_Selenium2TestCase_Element $element = NULL)
175: {
176: $this->spinAssert("$text was never found", function() use ($text, $element) {
177: $el_text = $element ? $element->text() : $this->byCssSelector('body')->text();
178: return strpos($el_text, $text) !== false;
179: });
180: }
181:
182: 183: 184:
185: public function assertTextNotPresent($text, \PHPUnit_Extensions_Selenium2TestCase_Element $element = NULL)
186: {
187: $this->spinAssert("$text was found", function() use ($text, $element) {
188: $el_text = $element ? $element->text() : $this->byCssSelector('body')->text();
189: return strpos($el_text, $text) === false;
190: });
191: }
192:
193: 194: 195:
196: public function sendKeys(\PHPUnit_Extensions_Selenium2TestCase_Element $element, $keys)
197: {
198: $element->value($keys);
199:
200:
201: }
202: }
203: ?>