Skip to content

Commit 021f93b

Browse files
committed
Initial commit
0 parents  commit 021f93b

File tree

1,224 files changed

+672939
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,224 files changed

+672939
-0
lines changed

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Auto detect text files and perform LF normalization
2+
* text=auto

.github/workflows/main.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Playwright Tests
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
7+
jobs:
8+
test:
9+
runs-on: windows-latest
10+
11+
steps:
12+
- uses: actions/checkout@v4
13+
14+
- name: Setup Node.js
15+
uses: actions/setup-node@v4
16+
with:
17+
node-version: 18
18+
19+
- name: Install dependencies
20+
run: npm ci
21+
22+
- name: Install Playwright browsers
23+
run: npx playwright install --with-deps
24+
25+
- name: Run Playwright tests
26+
run: npx playwright test
27+
28+
- name: Upload HTML report
29+
if: always()
30+
uses: actions/upload-artifact@v4
31+
with:
32+
name: playwright-report
33+
path: playwright-report/

README.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# **Playwright Page Object Model Framework**
2+
3+
🎭 Playwright • 🟦 TypeScript • 📊 Allure Reporting
4+
5+
## **Overview**
6+
7+
A modular and scalable Page Object Model (POM) framework built with Playwright, TypeScript, and Allure. Designed for clean structure, maintainability, and fast UI automation development.
8+
9+
## **Features**
10+
11+
✨ Structured POM architecture
12+
🧩 Centralized selectors
13+
🌐 Environment-based config handling
14+
📑 Allure reporting with artifacts
15+
📁 Fixtures & reusable utilities
16+
⚡ Parallel & cross-browser execution
17+
18+
## **Tech Stack**
19+
20+
🧪 Playwright
21+
🟦 TypeScript
22+
📊 Allure
23+
🟩 Node.js
24+
25+
## **Project Structure**
26+
27+
```
28+
config/ 🌐 Environment configs
29+
fixtures/ 📁 Test data
30+
pages/ 📄 Page Objects
31+
selectors/ 🔖 Selectors
32+
tests/ 🧪 Test suites
33+
utils/ 🔧 Helpers
34+
playwright.config.ts ⚙️ Playwright global config
35+
package.json 📦 Dependencies
36+
```
37+
38+
## **Setup**
39+
40+
```
41+
npm install
42+
```
43+
44+
## **Run Tests**
45+
46+
```
47+
npx playwright test
48+
```
49+
50+
## **Allure Reporting**
51+
52+
```
53+
npx playwright test --reporter=line,allure-playwright
54+
allure generate ./allure-results --clean
55+
allure open ./allure-report
56+
```
57+
58+
## **Environment Handling**
59+
60+
Stored inside `config/env.ts`.
61+
62+
## **Reports**
63+
64+
📊 Allure HTML report
65+
🖼️ Screenshots
66+
📝 Logs
67+
🔍 Step details
68+
📁 Playwright HTML & trace reports
69+
70+
## **Recommended VSCode Extensions**
71+
72+
🧪 Playwright Test
73+
✨ Prettier
74+
✔️ ESLint

allure-auto.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { execSync } from "node:child_process";
2+
3+
class AllureAutoReporter {
4+
async onEnd() {
5+
try {
6+
console.log("Generating Allure Report...");
7+
execSync("allure generate allure-results --clean -o allure-report --history allure-report/history", {
8+
stdio: "inherit",
9+
});
10+
} catch (error) {
11+
console.error("Allure auto report failed:", error);
12+
}
13+
}
14+
}
15+
16+
export default AllureAutoReporter;

allure-report/app.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
2.02 MB
Binary file not shown.
Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
# Page snapshot
2+
3+
```yaml
4+
- generic [active] [ref=e1]:
5+
- generic [ref=e2]:
6+
- navigation "main navigation" [ref=e3]:
7+
- generic [ref=e4]:
8+
- link "letcode" [ref=e6] [cursor=pointer]:
9+
- /url: /
10+
- img "letcode" [ref=e7]
11+
- generic [ref=e8]:
12+
- generic [ref=e9]:
13+
- link "Work-Space" [ref=e10] [cursor=pointer]:
14+
- /url: /test
15+
- generic [ref=e12] [cursor=pointer]: Products
16+
- generic [ref=e14] [cursor=pointer]: Grooming
17+
- link "Courses" [ref=e15] [cursor=pointer]:
18+
- /url: /courses
19+
- link "Contact" [ref=e16] [cursor=pointer]:
20+
- /url: /contact
21+
- button "" [ref=e20] [cursor=pointer]:
22+
- generic [ref=e22]:
23+
- generic [ref=e25]:
24+
- heading "Fake Store" [level=1] [ref=e26]
25+
- generic [ref=e27]:
26+
- heading "Products" [level=2] [ref=e29]
27+
- generic [ref=e31]:
28+
- button "" [ref=e32] [cursor=pointer]:
29+
- generic [ref=e34]:
30+
- button "" [ref=e35] [cursor=pointer]:
31+
- generic [ref=e37]:
32+
- generic [ref=e38]:
33+
- generic [ref=e40]:
34+
- paragraph [ref=e42]: Fjallraven - Foldsack No. 1 Ba...
35+
- figure [ref=e44]:
36+
- img "Fjallraven - Foldsack No. 1 Backpack, Fits 15 Laptops" [ref=e45]
37+
- paragraph [ref=e47]: Your perfect pack for everyday use and walks in the forest. Stash your laptop (u...
38+
- button "₹ 109.95" [ref=e49] [cursor=pointer]
39+
- generic [ref=e51]:
40+
- paragraph [ref=e53]: Mens Casual Premium Slim Fit T...
41+
- figure [ref=e55]:
42+
- img "Mens Casual Premium Slim Fit T-Shirts" [ref=e56]
43+
- paragraph [ref=e58]: Slim-fitting style, contrast raglan long sleeve, three-button henley placket, li...
44+
- button "₹ 22.3" [ref=e60] [cursor=pointer]
45+
- generic [ref=e62]:
46+
- paragraph [ref=e64]: Mens Cotton Jacket...
47+
- figure [ref=e66]:
48+
- img "Mens Cotton Jacket" [ref=e67]
49+
- paragraph [ref=e69]:
50+
- text: great outerwear
51+
- link "jackets" [ref=e70] [cursor=pointer]:
52+
- /url: "#"
53+
- img [ref=e71]
54+
- text: jackets
55+
- text: for Spring/Autumn/Winter, suitable for many occasions, s...
56+
- button "₹ 55.99" [ref=e74] [cursor=pointer]
57+
- generic [ref=e76]:
58+
- paragraph [ref=e78]: Mens Casual Slim Fit...
59+
- figure [ref=e80]:
60+
- img "Mens Casual Slim Fit" [ref=e81]
61+
- paragraph [ref=e83]: The color could be slightly different between on the screen and in practice. / P...
62+
- button "₹ 15.99" [ref=e85] [cursor=pointer]
63+
- generic [ref=e87]:
64+
- paragraph [ref=e89]: John Hardy Women's Legends Nag...
65+
- figure [ref=e91]:
66+
- img "John Hardy Women's Legends Naga Gold & Silver Dragon Station Chain Bracelet" [ref=e92]
67+
- paragraph [ref=e94]: From our Legends Collection, the Naga was inspired by the mythical water dragon ...
68+
- button "₹ 695" [ref=e96] [cursor=pointer]
69+
- generic [ref=e98]:
70+
- paragraph [ref=e100]: Solid Gold Petite Micropave ...
71+
- figure [ref=e102]:
72+
- img "Solid Gold Petite Micropave" [ref=e103]
73+
- paragraph [ref=e105]: Satisfaction Guaranteed. Return or exchange any order within 30 days.Designed an...
74+
- button "₹ 168" [ref=e107] [cursor=pointer]
75+
- generic [ref=e109]:
76+
- paragraph [ref=e111]: White Gold Plated Princess...
77+
- figure [ref=e113]:
78+
- img "White Gold Plated Princess" [ref=e114]
79+
- paragraph [ref=e116]: Classic Created Wedding Engagement Solitaire Diamond Promise Ring for Her. Gifts...
80+
- button "₹ 9.99" [ref=e118] [cursor=pointer]
81+
- generic [ref=e120]:
82+
- paragraph [ref=e122]: Pierced Owl Rose Gold Plated S...
83+
- figure [ref=e124]:
84+
- img "Pierced Owl Rose Gold Plated Stainless Steel Double" [ref=e125]
85+
- paragraph [ref=e127]: Rose Gold Plated Double Flared Tunnel Plug Earrings. Made of 316L Stainless Stee...
86+
- button "₹ 10.99" [ref=e129] [cursor=pointer]
87+
- generic [ref=e131]:
88+
- paragraph [ref=e133]: WD 2TB Elements Portable Exter...
89+
- figure [ref=e135]:
90+
- img "WD 2TB Elements Portable External Hard Drive - USB 3.0" [ref=e136]
91+
- paragraph [ref=e138]: USB 3.0 and USB 2.0 Compatibility Fast data transfers Improve PC Performance Hig...
92+
- button "₹ 64" [ref=e140] [cursor=pointer]
93+
- generic [ref=e142]:
94+
- paragraph [ref=e144]: SanDisk SSD PLUS 1TB Internal ...
95+
- figure [ref=e146]:
96+
- img "SanDisk SSD PLUS 1TB Internal SSD - SATA III 6 Gb/s" [ref=e147]
97+
- paragraph [ref=e149]: Easy upgrade for faster boot up, shutdown, application load and response (As com...
98+
- button "₹ 109" [ref=e151] [cursor=pointer]
99+
- generic [ref=e153]:
100+
- paragraph [ref=e155]: Silicon Power 256GB SSD 3D NAN...
101+
- figure [ref=e157]:
102+
- img "Silicon Power 256GB SSD 3D NAND A55 SLC Cache Performance Boost SATA III 2.5" [ref=e158]
103+
- paragraph [ref=e160]: 3D NAND flash are applied to deliver high transfer speeds Remarkable transfer sp...
104+
- button "₹ 109" [ref=e162] [cursor=pointer]
105+
- generic [ref=e164]:
106+
- paragraph [ref=e166]: WD 4TB Gaming Drive Works with...
107+
- figure [ref=e168]:
108+
- img "WD 4TB Gaming Drive Works with Playstation 4 Portable External Hard Drive" [ref=e169]
109+
- paragraph [ref=e171]: Expand your PS4 gaming experience, Play anywhere Fast and easy, setup Sleek desi...
110+
- button "₹ 114" [ref=e173] [cursor=pointer]
111+
- generic [ref=e175]:
112+
- paragraph [ref=e177]: Acer SB220Q bi 21.5 inches Ful...
113+
- figure [ref=e179]:
114+
- img "Acer SB220Q bi 21.5 inches Full HD (1920 x 1080) IPS Ultra-Thin" [ref=e180]
115+
- paragraph [ref=e182]: 21. 5 inches Full HD (1920 x 1080) widescreen IPS display And Radeon free Sync t...
116+
- button "₹ 599" [ref=e184] [cursor=pointer]
117+
- generic [ref=e186]:
118+
- paragraph [ref=e188]: Samsung 49-Inch CHG90 144Hz Cu...
119+
- figure [ref=e190]:
120+
- img "Samsung 49-Inch CHG90 144Hz Curved Gaming Monitor (LC49HG90DMNXZA) – Super Ultrawide Screen QLED" [ref=e191]
121+
- paragraph [ref=e193]: 49 INCH SUPER ULTRAWIDE 32:9 CURVED GAMING MONITOR with dual 27 inch screen side...
122+
- button "₹ 999.99" [ref=e195] [cursor=pointer]
123+
- generic [ref=e197]:
124+
- paragraph [ref=e199]: BIYLACLESEN Women's 3-in-1 Sno...
125+
- figure [ref=e201]:
126+
- img "BIYLACLESEN Women's 3-in-1 Snowboard Jacket Winter Coats" [ref=e202]
127+
- paragraph [ref=e204]:
128+
- text: Note:The
129+
- link "Jackets" [ref=e205] [cursor=pointer]:
130+
- /url: "#"
131+
- img [ref=e206]
132+
- text: Jackets
133+
- text: is US standard size, Please choose size as your usual wear Mate...
134+
- button "₹ 56.99" [ref=e209] [cursor=pointer]
135+
- generic [ref=e211]:
136+
- paragraph [ref=e213]: Lock and Love Women's Removabl...
137+
- figure [ref=e215]:
138+
- img "Lock and Love Women's Removable Hooded Faux Leather Moto Biker Jacket" [ref=e216]
139+
- paragraph [ref=e218]: 100% POLYURETHANE(shell) 100% POLYESTER(lining) 75% POLYESTER 25% COTTON (SWEATE...
140+
- button "₹ 29.95" [ref=e220] [cursor=pointer]
141+
- generic [ref=e222]:
142+
- paragraph [ref=e224]: Rain Jacket Women Windbreaker ...
143+
- figure [ref=e226]:
144+
- img "Rain Jacket Women Windbreaker Striped Climbing Raincoats" [ref=e227]
145+
- paragraph [ref=e229]: Lightweight perfet for trip or casual wear---Long sleeve with hooded, adjustable...
146+
- button "₹ 39.99" [ref=e231] [cursor=pointer]
147+
- generic [ref=e233]:
148+
- paragraph [ref=e235]: MBJ Women's Solid Short Sleeve...
149+
- figure [ref=e237]:
150+
- img "MBJ Women's Solid Short Sleeve Boat Neck V" [ref=e238]
151+
- paragraph [ref=e240]: 95% RAYON 5% SPANDEX, Made in USA or Imported, Do Not Bleach, Lightweight fabric...
152+
- button "₹ 9.85" [ref=e242] [cursor=pointer]
153+
- generic [ref=e244]:
154+
- paragraph [ref=e246]: Opna Women's Short Sleeve Mois...
155+
- figure [ref=e248]:
156+
- img "Opna Women's Short Sleeve Moisture" [ref=e249]
157+
- paragraph [ref=e251]: 100% Polyester, Machine wash, 100% cationic polyester interlock, Machine Wash & ...
158+
- button "₹ 7.95" [ref=e253] [cursor=pointer]
159+
- generic [ref=e255]:
160+
- paragraph [ref=e257]: DANVOUY Womens T Shirt Casual ...
161+
- figure [ref=e259]:
162+
- img "DANVOUY Womens T Shirt Casual Cotton Short" [ref=e260]
163+
- paragraph [ref=e262]:
164+
- text: "95%Cotton,5%Spandex, Features: Casual, Short Sleeve, Letter Print,V-Neck,Fashion..."
165+
- link "Best fashion retailers" [ref=e263] [cursor=pointer]:
166+
- img [ref=e265]
167+
- text: Best fashion retailers
168+
- button "₹ 12.99" [ref=e268] [cursor=pointer]
169+
- paragraph [ref=e270]:
170+
- text: "Credit: Built using"
171+
- link "Fakestoreapi" [ref=e271] [cursor=pointer]:
172+
- /url: https://fakestoreapi.com/
173+
- generic [ref=e272]:
174+
- insertion [ref=e274]:
175+
- generic [ref=e276]:
176+
- generic "These are topics related to the article that might interest you" [ref=e277]: Discover more
177+
- link "T-shirt" [ref=e278] [cursor=pointer]:
178+
- img [ref=e280]
179+
- text: T-shirt
180+
- link "Three Button Henley" [ref=e282] [cursor=pointer]:
181+
- img [ref=e284]
182+
- text: Three Button Henley
183+
- link "T Shirt" [ref=e286] [cursor=pointer]:
184+
- img [ref=e288]
185+
- text: T Shirt
186+
- link "jackets" [ref=e290] [cursor=pointer]:
187+
- img [ref=e292]
188+
- text: jackets
189+
- link "Jackets" [ref=e294] [cursor=pointer]:
190+
- img [ref=e296]
191+
- text: Jackets
192+
- link "Best fashion retailers" [ref=e298] [cursor=pointer]:
193+
- img [ref=e300]
194+
- text: Best fashion retailers
195+
- link "Jacket" [ref=e302] [cursor=pointer]:
196+
- img [ref=e304]
197+
- text: Jacket
198+
- link "Lock and Love" [ref=e306] [cursor=pointer]:
199+
- img [ref=e308]
200+
- text: Lock and Love
201+
- link "Contrast Raglan Long Sleeve" [ref=e310] [cursor=pointer]:
202+
- img [ref=e312]
203+
- text: Contrast Raglan Long Sleeve
204+
- link "Shirt" [ref=e314] [cursor=pointer]:
205+
- img [ref=e316]
206+
- text: Shirt
207+
- contentinfo [ref=e318]:
208+
- generic [ref=e320]:
209+
- generic [ref=e321]:
210+
- paragraph [ref=e322]: LetCode by Koushik Chatterjee
211+
- paragraph [ref=e323]: Empowering Test Automation Engineers through learning
212+
- paragraph [ref=e325]:
213+
- text: © 2025 LetCode | Created by
214+
- link "Koushik Chatterjee" [ref=e326] [cursor=pointer]:
215+
- /url: https://www.linkedin.com/in/ortoni/
216+
- text: "&"
217+
- link "Bollineni Lakshmi Yaswanth" [ref=e327] [cursor=pointer]:
218+
- /url: https://www.linkedin.com/in/bollineni-lakshmi-yaswanth-14472a199
219+
- insertion [ref=e328]:
220+
- iframe [ref=e331]:
221+
- iframe [ref=f1e1]:
222+
- generic [ref=f2e1]:
223+
- generic [ref=f2e2]:
224+
- generic:
225+
- img [ref=f2e6] [cursor=pointer]
226+
- button [ref=f2e8] [cursor=pointer]:
227+
- img [ref=f2e9]
228+
- generic [ref=f2e16]:
229+
- link [ref=f2e17] [cursor=pointer]:
230+
- /url: https://googleads.g.doubleclick.net/dbm/clk?sa=L&ai=C1P6SYo4haeSCB9mMpt8P7sLo-ArNuafEgwGN3PLn2xS3_PP9CBABINORliJg5arlg6wOyAEJqQKPH6-eNf9HPqgDAcgDmwSqBPQBT9An59ZGgXMoyviB-doBkojmgXAnQsh5sqDtV5DKuFPpVF4vbBqjCIsxJ4vkzyQszb20s1yetgCX_fG2NQknwQLg0mzuj2j2-lQ-MwAtycw6JX294XM5mZHS7-mdjykMjpFG19YH0uEY0qrC1KgnoT1ITRmGWb8WrHYTiOKpbDi3BetrpgeOPhU9hwSmWOORQAyyBlgCEFzarCmtFwVqfHyVqnU8_YsRVALabtD9PeKD0NBFHZwyC5-FALC86DDssiXjthyMPpww98wP3WX-ZwOkhJhvkl7SvviznGzayqsdesg5sEQwmZWFjjy74owGQ1an7sAE0KjB9sAF4AQDiAWzptGGVpAGAaAGTYAHzauUqxioB6fMsQKoB6a-G6gHzM6xAqgH89EbqAeW2BuoB6qbsQKoB47OG6gHk9gbqAfw4BuoB-6WsQKoB_6esQKoB6--sQKoB9XJG6gH2baxAqgHmgaoB_-esQKoB9-fsQKoB_jCsQKoB_vCsQKoB-fXsQLYBwDSCC8IgGEQARifATIIioKAgICAgAg6DYBAgMCAgICAqIACqANIvf3BOliXt-C2xIWRA4AKAZgLAcgLAYAMAaoNAklO6g0TCOb097bEhZEDFVmG6QUdbiEar_ANAYgOCbATxuy3H9ATANgTENgUAdAVAcoWAgoA-BYBgBcBshcCGAKyGAkSArhQGE0iAQDQGQE&ae=1&num=1&cid=CAQSvwEAwksa0YkPmKBXNRC7KwRNYV60ZSFj0AZEx77kGjcNnKGDoucwJFnXbu_zDVMZ_5hryUv36vNcWuHUD7zG5nKf_iae_hc2mmKX7q8c0ZMrsdF-zqXvfU3HuPQjtuWt8OSix9YLKhG1iwIlgYYwnCab4JMoyo3QQlQ6pBMEQ_3IjUZ2bkN8eYc9x4pvtaRav2Oh4EQSz0cD1bE916ZcvHVwzK9FjMiLPgmxLd5t4CqIfXXbyY5k7wR8aThMKJpDLxgB&sig=AOD64_0IkL_3_sgGCVTv2XIp4QcUidS9gA&client=ca-pub-6251538267574677&dbm_c=AKAmf-BIsNuXFBCny_fF7uU2ZuMqk8U6qZMszUZfo_wh_YzVRb3mZpDv_iTeKAoNl4jqmI9LBOvwx6HsL2NbsfutnRfZkrBtn6_oWq8F1GADS2fXyfASgkxrytItInKV0n506Y08IIcOGDs4KhXKCejn78bJl0fFjfE2PZVvDM8mQQwlG1Xw1xpLUvkbPDNFUnWkLXBgIbvEBZm7vg0w4UU7y3_X6dNTgFCmQ2ZM_3mWgzB8Srr9q8GxZSI78bqn5nKx9I2YZZkUFJlOqOLqoSfi49Q5nWPeICBrQj2CLJuBhS7799LiAgY&cry=1&dbm_d=AKAmf-B_k5IOag6ughrjIMwM982jSDCNoOHTGH5VR0zEFgj9e8QoQ54lfdQ1_ONpSH5XcWh1lvPl7pL4p7CXruHsqk9gauTveVIxZ5-Fwh1ybRPdz4eunKEo-5vGkojJdet7qAlt-gkFZOYAzvKz4CEZvRzlZokyLINTRNpgn7O_gy86VFWgN8-Ez5VjcvHdl_7KWttPVkcxiavef_TJcy_sJ3_8Yu9hSWdrOIEXOk0vim_qBdl8uBCvWpu2hZmrboDvNbD7bEYnYZreDXd3aTjZ_8vKVNS0YQyl2hflMNDhMhYh6mKekDM-z_tpLf7a20ToM9lRZZD1P15ClaKH96X3lmX1rgK7dPTHVrrNmHvDuSUXt_0xAhswJRgL92nmAtIbG81aR9O4PKELc6hFMaeSxBdh9vgu5Zb67CMpGKvg0IskZAGaEz4J0OHW_4md4hGag6ybZcGjtRuDkNcCzM2IwXUch3NtQ_qQrf51dTs8xk5bX22WwuFK0HEEVs1RFpiEihhLdeyF1TozV4--jloVp7GkW02IFpqP616LYgYjtI-WG70E4tMR3URJAR_xh2C2PTrl9spaZatw0j7-PShvJe-UV4G0BTXrgb2ApdPnFZWwh4hGJk7XVys46qowzYZwcueAwe2i8Epg8TvJANmCzgIQLGpDP4hcTmvrqUi7qeK9KbUcUvwvOfuPrXbRV3MpM0LwCjX_&adurl=https://servedby.flashtalking.com/click/7/289921;9917026;5606100;211;0/?us_privacy=!!US_PRIVACY!&ft_impID=B0680E8B-178B-7195-811B-6BE040F831EC&g=65350BA8A6412F&random=623615.7516085271&ft_width=728&ft_height=90&url=https://www.zoho.com/in/payroll/?utm_source=paytm&utm_medium=cpc&utm_campaign=india25&utm_content=DB-728x90
231+
- iframe [ref=f2e18]:
232+
- generic [ref=f3e5]:
233+
- img [ref=f3e8]
234+
- img [ref=f3e11]
235+
- img [ref=f3e14]
236+
- img [ref=f3e17]
237+
- img [ref=f3e20]
238+
- img [ref=f3e23]
239+
- img [ref=f3e26]
240+
- img [ref=f3e29]
241+
- img [ref=f3e32]
242+
- img [ref=f3e35]
243+
- img [ref=f3e38]
244+
- img [ref=f3e41]
245+
- generic [ref=e332]:
246+
- generic [ref=e333] [cursor=pointer]:
247+
- img [ref=e335]
248+
- link "Go to shopping options for Jacket" [ref=e337]: Jacket
249+
- button "Close shopping anchor" [ref=e338]
250+
```

0 commit comments

Comments
 (0)