@@ -19,9 +19,23 @@ class Secure3d extends Form
19
19
/**
20
20
* 3D Secure iFrame locator.
21
21
*
22
- * @var array
22
+ * @var string
23
+ */
24
+ protected $ braintree3dSecure = "//iframe[contains(@id, 'braintreethreedsecurelanding')] " ;
25
+
26
+ /**
27
+ * AuthWindow locator.
28
+ *
29
+ * @var string
23
30
*/
24
- protected $ braintree3dSecure = "//iframe[contains(@src, 'braintreegateway.com/3ds')] " ;
31
+ private $ authWindow3dSecure = "//iframe[contains(@id, 'authWindow')] " ;
32
+
33
+ /**
34
+ * Password field locator.
35
+ *
36
+ * @var string
37
+ */
38
+ private $ passwordField = "//*[@name='external.field.password'] " ;
25
39
26
40
/**
27
41
* Submit button button css selector.
@@ -33,12 +47,12 @@ class Secure3d extends Form
33
47
/**
34
48
* Switch to 3D Secure iFrame.
35
49
*
36
- * @param array $locator
50
+ * @param string $locator
37
51
*/
38
52
public function switchToFrame ($ locator )
39
53
{
40
- $ this ->browser ->switchToFrame (new Locator ($ locator , Locator::SELECTOR_XPATH ));
41
- $ this ->browser ->switchToFrame (new Locator ($ locator , Locator::SELECTOR_XPATH ));
54
+ $ this ->browser ->switchToFrame (new Locator ($ locator , Locator::SELECTOR_XPATH ));
55
+ $ this ->browser ->switchToFrame (new Locator ($ this -> authWindow3dSecure , Locator::SELECTOR_XPATH ));
42
56
}
43
57
44
58
/**
@@ -56,13 +70,20 @@ public function submit()
56
70
*
57
71
* @param FixtureInterface $fixture
58
72
* @param SimpleElement|null $element
73
+ *
59
74
* @return $this|void
60
75
*/
61
76
public function fill (FixtureInterface $ fixture , SimpleElement $ element = null )
62
77
{
63
78
$ mapping = $ this ->dataMapping ($ fixture ->getData ());
64
79
$ this ->switchToFrame ($ this ->braintree3dSecure );
65
80
$ element = $ this ->browser ->find ('body ' );
81
+ $ this ->browser ->waitUntil (
82
+ function () use ($ element ) {
83
+ $ fieldElement = $ element ->find ($ this ->passwordField , Locator::SELECTOR_XPATH );
84
+ return $ fieldElement ->isVisible () ? true : null ;
85
+ }
86
+ );
66
87
$ this ->_fill ([$ mapping ['secure3d_password ' ]], $ element );
67
88
$ this ->submit ();
68
89
$ this ->browser ->switchToFrame ();
0 commit comments