Completed
Push — 3.4 ( fe24dc...fe62a1 )
by Jonathan
02:14 queued 55s
created

MinkContext::assertHttpResponse()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Drupal\DrupalExtension\Context;
4
5
use Behat\Behat\Context\TranslatableContext;
6
use Behat\Mink\Exception\UnsupportedDriverActionException;
7
use Behat\MinkExtension\Context\MinkContext as MinkExtension;
8
9
/**
10
 * Extensions to the Mink Extension.
11
 */
12
class MinkContext extends MinkExtension implements TranslatableContext {
13
14
  /**
15
   * Returns list of definition translation resources paths.
16
   *
17
   * @return array
18
   */
19
  public static function getTranslationResources() {
20
    return self::getMinkTranslationResources() + glob(__DIR__ . '/../../../../i18n/*.xliff');
21
  }
22
23
  /**
24
   * Return a region from the current page.
25
   *
26
   * @throws \Exception
27
   *   If region cannot be found.
28
   *
29
   * @param string $region
30
   *   The machine name of the region to return.
31
   *
32
   * @return \Behat\Mink\Element\NodeElement
33
   */
34 View Code Duplication
  public function getRegion($region) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
35
    $session = $this->getSession();
36
    $regionObj = $session->getPage()->find('region', $region);
37
    if (!$regionObj) {
38
      throw new \Exception(sprintf('No region "%s" found on the page %s.', $region, $session->getCurrentUrl()));
39
    }
40
41
    return $regionObj;
42
  }
43
44
  /**
45
   * Visit a given path, and additionally check for HTTP response code 200.
46
   *
47
   * @Given I am at :path
48
   * @When I visit :path
49
   *
50
   * @throws UnsupportedDriverActionException
51
   */
52
  public function assertAtPath($path) {
53
    $this->getSession()->visit($this->locatePath($path));
54
55
    // If available, add extra validation that this is a 200 response.
56
    try {
57
      $this->getSession()->getStatusCode();
58
      $this->assertHttpResponse('200');
59
    }
60
    catch (UnsupportedDriverActionException $e) {
61
      // Simply continue on, as this driver doesn't support HTTP response codes.
62
    }
63
  }
64
65
  /**
66
   * @When I click :link
67
   */
68
  public function assertClick($link) {
69
    // Use the Mink Extenstion step definition.
70
    $this->clickLink($link);
71
  }
72
73
  /**
74
   * @Given for :field I enter :value
75
   * @Given I enter :value for :field
76
   */
77
  public function assertEnterField($field, $value) {
78
    // Use the Mink Extenstion step definition.
79
    $this->fillField($field, $value);
80
  }
81
82
  /**
83
   * For javascript enabled scenarios, always wait for AJAX before clicking.
84
   *
85
   * @BeforeStep
86
   */
87 View Code Duplication
  public function beforeJavascriptStep($event) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
88
    /** @var \Behat\Behat\Hook\Scope\BeforeStepScope $event */
89
    $tags = $event->getFeature()->getTags();
90
    if (!in_array('javascript', $tags)) {
91
      return;
92
    }
93
    $text = $event->getStep()->getText();
94
    if (preg_match('/(follow|press|click|submit)/i', $text)) {
95
      $this->iWaitForAjaxToFinish();
96
    }
97
  }
98
99
  /**
100
   * For javascript enabled scenarios, always wait for AJAX after clicking.
101
   *
102
   * @AfterStep
103
   */
104 View Code Duplication
  public function afterJavascriptStep($event) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
105
    /** @var \Behat\Behat\Hook\Scope\BeforeStepScope $event */
106
    $tags = $event->getFeature()->getTags();
107
    if (!in_array('javascript', $tags)) {
108
      return;
109
    }
110
    $text = $event->getStep()->getText();
111
    if (preg_match('/(follow|press|click|submit)/i', $text)) {
112
      $this->iWaitForAjaxToFinish();
113
    }
114
  }
115
116
  /**
117
   * Wait for AJAX to finish.
118
   *
119
   * @see \Drupal\FunctionalJavascriptTests\JSWebAssert::assertWaitOnAjaxRequest()
120
   *
121
   * @Given I wait for AJAX to finish
122
   */
123
  public function iWaitForAjaxToFinish() {
124
    $condition = <<<JS
125
    (function() {
126
      function isAjaxing(instance) {
127
        return instance && instance.ajaxing === true;
128
      }
129
      var d7_not_ajaxing = true;
130
      if (typeof Drupal !== 'undefined' && typeof Drupal.ajax !== 'undefined' && typeof Drupal.ajax.instances === 'undefined') {
131
        for(var i in Drupal.ajax) { if (isAjaxing(Drupal.ajax[i])) { d7_not_ajaxing = false; } }
132
      }
133
      var d8_not_ajaxing = (typeof Drupal === 'undefined' || typeof Drupal.ajax === 'undefined' || typeof Drupal.ajax.instances === 'undefined' || !Drupal.ajax.instances.some(isAjaxing))
134
      return (
135
        // Assert no AJAX request is running (via jQuery or Drupal) and no
136
        // animation is running.
137
        (typeof jQuery === 'undefined' || (jQuery.active === 0 && jQuery(':animated').length === 0)) &&
138
        d7_not_ajaxing && d8_not_ajaxing
139
      );
140
    }());
141
JS;
142
    $result = $this->getSession()->wait(5000, $condition);
143
    if (!$result) {
144
      throw new \RuntimeException('Unable to complete AJAX request.');
145
    }
146
  }
147
  /**
148
   * Presses button with specified id|name|title|alt|value.
149
   *
150
   * @When I press the :button button
151
   */
152
  public function pressButton($button) {
153
    // Wait for any open autocomplete boxes to finish closing.  They block
154
    // form-submission if they are still open.
155
    // Use a step 'I press the "Esc" key in the "LABEL" field' to close
156
    // autocomplete suggestion boxes with Mink.  "Click" events on the
157
    // autocomplete suggestion do not work.
158
    try {
159
      $this->getSession()->wait(1000, 'typeof(jQuery)=="undefined" || jQuery("#autocomplete").length === 0');
160
    }
161
    catch (UnsupportedDriverActionException $e) {
162
      // The jQuery probably failed because the driver does not support
163
      // javascript.  That is okay, because if the driver does not support
164
      // javascript, it does not support autocomplete boxes either.
165
    }
166
167
    // Use the Mink Extension step definition.
168
    return parent::pressButton($button);
169
  }
170
171
  /**
172
   * @Given I press the :char key in the :field field
173
   *
174
   * @param mixed $char could be either char ('b') or char-code (98)
175
   * @throws \Exception
176
   */
177
  public function pressKey($char, $field) {
178
    static $keys = array(
179
      'backspace' => 8,
180
      'tab' => 9,
181
      'enter' => 13,
182
      'shift' => 16,
183
      'ctrl' =>  17,
184
      'alt' => 18,
185
      'pause' => 19,
186
      'break' => 19,
187
      'escape' =>  27,
188
      'esc' =>  27,
189
      'end' => 35,
190
      'home' =>  36,
191
      'left' => 37,
192
      'up' => 38,
193
      'right' =>39,
194
      'down' => 40,
195
      'insert' =>  45,
196
      'delete' =>  46,
197
      'pageup' => 33,
198
      'pagedown' => 34,
199
      'capslock' => 20,
200
    );
201
202
    if (is_string($char)) {
203
      if (strlen($char) < 1) {
204
        throw new \Exception('FeatureContext->keyPress($char, $field) was invoked but the $char parameter was empty.');
205
      }
206
      elseif (strlen($char) > 1) {
207
        // Support for all variations, e.g. ESC, Esc, page up, pageup.
208
        $char = $keys[strtolower(str_replace(' ', '', $char))];
209
      }
210
    }
211
212
    $element = $this->getSession()->getPage()->findField($field);
213
    if (!$element) {
214
      throw new \Exception("Field '$field' not found");
215
    }
216
217
    $driver = $this->getSession()->getDriver();
218
    // $driver->keyPress($element->getXpath(), $char);
219
    // This alternative to Driver->keyPress() handles cases that depend on
220
    // javascript which binds to key down/up events directly, such as Drupal's
221
    // autocomplete.js.
222
    $driver->keyDown($element->getXpath(), $char);
223
    $driver->keyUp($element->getXpath(), $char);
224
  }
225
226
  /**
227
   * @Then I should see the link :link
228
   */
229 View Code Duplication
  public function assertLinkVisible($link) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
230
    $element = $this->getSession()->getPage();
231
    $result = $element->findLink($link);
232
233
    try {
234
      if ($result && !$result->isVisible()) {
235
        throw new \Exception(sprintf("No link to '%s' on the page %s", $link, $this->getSession()->getCurrentUrl()));
236
      }
237
    }
238
    catch (UnsupportedDriverActionException $e) {
239
      // We catch the UnsupportedDriverActionException exception in case
240
      // this step is not being performed by a driver that supports javascript.
241
      // All other exceptions are valid.
242
    }
243
244
    if (empty($result)) {
245
      throw new \Exception(sprintf("No link to '%s' on the page %s", $link, $this->getSession()->getCurrentUrl()));
246
    }
247
  }
248
249
  /**
250
   * Links are not loaded on the page.
251
   *
252
   * @Then I should not see the link :link
253
   */
254 View Code Duplication
  public function assertNotLinkVisible($link) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
255
    $element = $this->getSession()->getPage();
256
    $result = $element->findLink($link);
257
258
    try {
259
      if ($result && $result->isVisible()) {
260
        throw new \Exception(sprintf("The link '%s' was present on the page %s and was not supposed to be", $link, $this->getSession()->getCurrentUrl()));
261
      }
262
    }
263
    catch (UnsupportedDriverActionException $e) {
264
      // We catch the UnsupportedDriverActionException exception in case
265
      // this step is not being performed by a driver that supports javascript.
266
      // All other exceptions are valid.
267
    }
268
269
    if ($result) {
270
      throw new \Exception(sprintf("The link '%s' was present on the page %s and was not supposed to be", $link, $this->getSession()->getCurrentUrl()));
271
    }
272
  }
273
274
  /**
275
   * Links are loaded but not visually visible (e.g they have display: hidden applied).
276
   *
277
   * @Then I should not visibly see the link :link
278
   */
279 View Code Duplication
  public function assertNotLinkVisuallyVisible($link) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
280
    $element = $this->getSession()->getPage();
281
    $result = $element->findLink($link);
282
283
    try {
284
      if ($result && $result->isVisible()) {
285
        throw new \Exception(sprintf("The link '%s' was visually visible on the page %s and was not supposed to be", $link, $this->getSession()->getCurrentUrl()));
286
      }
287
    }
288
    catch (UnsupportedDriverActionException $e) {
289
      // We catch the UnsupportedDriverActionException exception in case
290
      // this step is not being performed by a driver that supports javascript.
291
      // All other exceptions are valid.
292
    }
293
294
    if (!$result) {
295
      throw new \Exception(sprintf("The link '%s' was not loaded on the page %s at all", $link, $this->getSession()->getCurrentUrl()));
296
    }
297
298
  }
299
300
  /**
301
   * @Then I (should )see the heading :heading
302
   */
303 View Code Duplication
  public function assertHeading($heading) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
304
    $element = $this->getSession()->getPage();
305
    foreach (array('h1', 'h2', 'h3', 'h4', 'h5', 'h6') as $tag) {
306
      $results = $element->findAll('css', $tag);
307
      foreach ($results as $result) {
308
        if ($result->getText() == $heading) {
309
          return;
310
        }
311
      }
312
    }
313
    throw new \Exception(sprintf("The text '%s' was not found in any heading on the page %s", $heading, $this->getSession()->getCurrentUrl()));
314
  }
315
316
  /**
317
   * @Then I (should )not see the heading :heading
318
   */
319 View Code Duplication
  public function assertNotHeading($heading) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
320
    $element = $this->getSession()->getPage();
321
    foreach (array('h1', 'h2', 'h3', 'h4', 'h5', 'h6') as $tag) {
322
      $results = $element->findAll('css', $tag);
323
      foreach ($results as $result) {
324
        if ($result->getText() == $heading) {
325
          throw new \Exception(sprintf("The text '%s' was found in a heading on the page %s", $heading, $this->getSession()->getCurrentUrl()));
326
        }
327
      }
328
    }
329
  }
330
331
  /**
332
   * @Then I (should ) see the button :button
333
   * @Then I (should ) see the :button button
334
   */
335 View Code Duplication
  public function assertButton($button) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
336
    $element = $this->getSession()->getPage();
337
    $buttonObj = $element->findButton($button);
338
    if (empty($buttonObj)) {
339
      throw new \Exception(sprintf("The button '%s' was not found on the page %s", $button, $this->getSession()->getCurrentUrl()));
340
    }
341
  }
342
343
  /**
344
   * @Then I should not see the button :button
345
   * @Then I should not see the :button button
346
   */
347 View Code Duplication
  public function assertNotButton($button) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
348
    $element = $this->getSession()->getPage();
349
    $buttonObj = $element->findButton($button);
350
    if (!empty($buttonObj)) {
351
      throw new \Exception(sprintf("The button '%s' was found on the page %s", $button, $this->getSession()->getCurrentUrl()));
352
    }
353
  }
354
355
  /**
356
   * @When I follow/click :link in the :region( region)
357
   *
358
   * @throws \Exception
359
   *   If region or link within it cannot be found.
360
   */
361 View Code Duplication
  public function assertRegionLinkFollow($link, $region) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
362
    $regionObj = $this->getRegion($region);
363
364
    // Find the link within the region
365
    $linkObj = $regionObj->findLink($link);
366
    if (empty($linkObj)) {
367
      throw new \Exception(sprintf('The link "%s" was not found in the region "%s" on the page %s', $link, $region, $this->getSession()->getCurrentUrl()));
368
    }
369
    $linkObj->click();
370
  }
371
372
  /**
373
   * Checks, if a button with id|name|title|alt|value exists or not and pressess the same
374
   *
375
   * @Given I press :button in the :region( region)
376
   *
377
   * @param $button
378
   *   string The id|name|title|alt|value of the button to be pressed
379
   * @param $region
380
   *   string The region in which the button should be pressed
381
   *
382
   * @throws \Exception
383
   *   If region or button within it cannot be found.
384
   */
385 View Code Duplication
  public function assertRegionPressButton($button, $region) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
386
    $regionObj = $this->getRegion($region);
387
388
    $buttonObj = $regionObj->findButton($button);
389
    if (empty($buttonObj)) {
390
      throw new \Exception(sprintf("The button '%s' was not found in the region '%s' on the page %s", $button, $region, $this->getSession()->getCurrentUrl()));
391
    }
392
    $regionObj->pressButton($button);
393
  }
394
395
  /**
396
   * Fills in a form field with id|name|title|alt|value in the specified region.
397
   *
398
   * @Given I fill in :value for :field in the :region( region)
399
   * @Given I fill in :field with :value in the :region( region)
400
   *
401
   * @throws \Exception
402
   *   If region cannot be found.
403
   */
404
  public function regionFillField($field, $value, $region) {
405
    $field = $this->fixStepArgument($field);
406
    $value = $this->fixStepArgument($value);
407
    $regionObj = $this->getRegion($region);
408
    $regionObj->fillField($field, $value);
409
  }
410
411
  /**
412
   * Find a heading in a specific region.
413
   *
414
   * @Then I should see the heading :heading in the :region( region)
415
   * @Then I should see the :heading heading in the :region( region)
416
   *
417
   * @throws \Exception
418
   *   If region or header within it cannot be found.
419
   */
420
  public function assertRegionHeading($heading, $region) {
421
    $regionObj = $this->getRegion($region);
422
423
    foreach (array('h1', 'h2', 'h3', 'h4', 'h5', 'h6') as $tag) {
424
      $elements = $regionObj->findAll('css', $tag);
425
      if (!empty($elements)) {
426
        foreach ($elements as $element) {
427
          if (trim($element->getText()) === $heading) {
428
            return;
429
          }
430
        }
431
      }
432
    }
433
434
    throw new \Exception(sprintf('The heading "%s" was not found in the "%s" region on the page %s', $heading, $region, $this->getSession()->getCurrentUrl()));
435
  }
436
437
  /**
438
   * @Then I should see the link :link in the :region( region)
439
   *
440
   * @throws \Exception
441
   *   If region or link within it cannot be found.
442
   */
443 View Code Duplication
  public function assertLinkRegion($link, $region) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
444
    $regionObj = $this->getRegion($region);
445
446
    $result = $regionObj->findLink($link);
447
    if (empty($result)) {
448
      throw new \Exception(sprintf('No link to "%s" in the "%s" region on the page %s', $link, $region, $this->getSession()->getCurrentUrl()));
449
    }
450
  }
451
452
  /**
453
   * @Then I should not see the link :link in the :region( region)
454
   *
455
   * @throws \Exception
456
   *   If region or link within it cannot be found.
457
   */
458 View Code Duplication
  public function assertNotLinkRegion($link, $region) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
459
    $regionObj = $this->getRegion($region);
460
461
    $result = $regionObj->findLink($link);
462
    if (!empty($result)) {
463
      throw new \Exception(sprintf('Link to "%s" in the "%s" region on the page %s', $link, $region, $this->getSession()->getCurrentUrl()));
464
    }
465
  }
466
467
  /**
468
   * @Then I should see( the text) :text in the :region( region)
469
   *
470
   * @throws \Exception
471
   *   If region or text within it cannot be found.
472
   */
473 View Code Duplication
  public function assertRegionText($text, $region) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
474
    $regionObj = $this->getRegion($region);
475
476
    // Find the text within the region
477
    $regionText = $regionObj->getText();
478
    if (strpos($regionText, $text) === FALSE) {
479
      throw new \Exception(sprintf("The text '%s' was not found in the region '%s' on the page %s", $text, $region, $this->getSession()->getCurrentUrl()));
480
    }
481
  }
482
483
  /**
484
   * @Then I should not see( the text) :text in the :region( region)
485
   *
486
   * @throws \Exception
487
   *   If region or text within it cannot be found.
488
   */
489 View Code Duplication
  public function assertNotRegionText($text, $region) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
490
    $regionObj = $this->getRegion($region);
491
492
    // Find the text within the region.
493
    $regionText = $regionObj->getText();
494
    if (strpos($regionText, $text) !== FALSE) {
495
      throw new \Exception(sprintf('The text "%s" was found in the region "%s" on the page %s', $text, $region, $this->getSession()->getCurrentUrl()));
496
    }
497
  }
498
499
  /**
500
   * @Then I (should )see the text :text
501
   */
502
  public function assertTextVisible($text) {
503
    // Use the Mink Extension step definition.
504
    $this->assertPageContainsText($text);
505
  }
506
507
  /**
508
   * @Then I should not see the text :text
509
   */
510
  public function assertNotTextVisible($text) {
511
    // Use the Mink Extension step definition.
512
    $this->assertPageNotContainsText($text);
513
  }
514
515
  /**
516
   * @Then I should get a :code HTTP response
517
   */
518
  public function assertHttpResponse($code) {
519
    // Use the Mink Extension step definition.
520
    $this->assertResponseStatus($code);
521
  }
522
523
  /**
524
   * @Then I should not get a :code HTTP response
525
   */
526
  public function assertNotHttpResponse($code) {
527
    // Use the Mink Extension step definition.
528
    $this->assertResponseStatusIsNot($code);
529
  }
530
531
  /**
532
   * @Given I check the box :checkbox
533
   */
534
  public function assertCheckBox($checkbox) {
535
    // Use the Mink Extension step definition.
536
    $this->checkOption($checkbox);
537
  }
538
539
  /**
540
   * @Given I uncheck the box :checkbox
541
   */
542
  public function assertUncheckBox($checkbox) {
543
    // Use the Mink Extension step definition.
544
    $this->uncheckOption($checkbox);
545
  }
546
547
  /**
548
   * @When I select the radio button :label with the id :id
549
   * @When I select the radio button :label
550
   *
551
   * @TODO convert to mink extension.
552
   */
553
  public function assertSelectRadioById($label, $id = '') {
554
    $element = $this->getSession()->getPage();
555
    $radiobutton = $id ? $element->findById($id) : $element->find('named', array('radio', $this->getSession()->getSelectorsHandler()->xpathLiteral($label)));
0 ignored issues
show
Deprecated Code introduced by
The method Behat\Mink\Selector\Sele...Handler::xpathLiteral() has been deprecated with message: since Mink 1.7. Use \Behat\Mink\Selector\Xpath\Escaper::escapeLiteral when building Xpath or pass the unescaped value when using the named selector.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
556
    if ($radiobutton === NULL) {
557
      throw new \Exception(sprintf('The radio button with "%s" was not found on the page %s', $id ? $id : $label, $this->getSession()->getCurrentUrl()));
558
    }
559
    $value = $radiobutton->getAttribute('value');
560
    $labelonpage = $radiobutton->getParent()->getText();
561
    if ($label != $labelonpage) {
562
      throw new \Exception(sprintf("Button with id '%s' has label '%s' instead of '%s' on the page %s", $id, $labelonpage, $label, $this->getSession()->getCurrentUrl()));
563
    }
564
    $radiobutton->selectOption($value, FALSE);
565
  }
566
567
  /**
568
   * @} End of defgroup "mink extensions"
569
   */
570
571
572
}
573