API-referentie voor Java Playwright
API-referentie voor de AxePlaywrightBuilder-klasse in de Axe DevTools voor Web Java Playwright-integratie
Dit document biedt een API-referentie voor de AxePlaywrightBuilder Java-klasse, die wordt geleverd door de Playwright Java-integratie.
De meeste methoden in de AxePlaywrightBuilder-klasse retourneren een AxePlaywrightBuilder-object, waarmee je eenvoudig meerdere methoden aan elkaar kunt koppelen. Zie de onderstaande codevoorbeelden voor voorbeelden van het koppelen van methoden.
Constructors
| Constructor | Beschrijving |
|---|---|
| AxePlaywrightBuilder(Page) | Standaardconstructor die een AxePlaywrightBuilder-object creëert. |
| AxePlaywrightBuilder(Page, File) | Creëer een AxePlaywrightBuilder-object en specificeer een JSON-bestand met aangepaste regels die tijdens de analyse moeten worden gebruikt. |
| AxePlaywrightBuilder(Page, String) | Creëer een AxePlaywrightBuilder-object terwijl je een JSON-String specificeert die aangepaste regels bevat. |
AxePlaywrightBuilder(Page)
Initialiseert een nieuwe instantie van de AxePlaywrightBuilder-klasse voor het gespecificeerde Page-object.
public AxePlaywrightBuilder(Page page);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| pagina | com.microsoft.Playwright.Page |
Het Page-object dat gebruikt moet worden voor toegankelijkheidsanalyse. |
Voorbeeld
Het volgende codevoorbeeld demonstreert deze constructor. Het laat ook zien hoe je een Page-object en een AxePlaywrightBuilder-object met dat Page-object kunt maken.
// Example Page
Page page = browser.newPage();
AxePlaywrightBuilder axePlaywrightBuilder = new AxePlaywrightBuilder(page);AxePlaywrightBuilder(Page, File)
Initialiseert een nieuwe instantie van de AxePlaywrightBuilder-klasse met het gespecificeerde Page object en het gespecificeerde File object. De File bevat aangepaste regels in een JSON-bestand.
public AxePlaywrightBuilder(Page page, File rules);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| pagina | com.microsoft.Playwright.Page |
Het vereiste Page-object. |
| regels | File |
Een File-object dat een JSON-bestand met aangepaste toegankelijkheidsregels vertegenwoordigt. |
Voorbeeld
Het volgende voorbeeld laat zien hoe je deze constructor gebruikt.
// Example Page
Page page = browser.newPage();
File customRuleset = new File("somePath/custom-ruleset.json")
AxePlaywrightBuilder axePlaywrightBuilder = new AxePlaywrightBuilder(page, customRuleset);AxePlaywrightBuilder(Page, String)
Initialiseert een nieuwe instantie van de AxePlaywrightBuilder klasse met het opgegeven Page object en het opgegeven String object, dat aangepaste regels bevat in een JSON-string.
public AxePlaywrightBuilder(Page page, String rules);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| pagina | com.microsoft.Playwright.Page |
Het vereiste Page object |
| regels | String |
Een JSON-string die een set aangepaste toegankelijkheidsregels vertegenwoordigt. |
Voorbeeld
Het volgende codevoorbeeld demonstreert deze constructor.
// Example Page
Page page = browser.newPage();
String customRuleset = "{...}"
AxePlaywrightBuilder axePlaywrightBuilder = new AxePlaywrightBuilder(page, customRuleset);Methoden
| Methode | Beschrijving |
|---|---|
| analyseren | Analyseer de Playwright-pagina en retourneer een AxeResults object van de voltooide analyse. |
| configureer(Bestand) | Bied een aangepaste configuratie over hoe axe-core wordt uitgevoerd via een JSON-bestand. |
| configureer(Tekenreeks) | Bied een aangepaste configuratie over hoe axe-core wordt uitgevoerd via een JSON-string. |
| uitschakelRegels | Voorkomt dat de gespecificeerde regels worden uitgevoerd tijdens de analyse. |
| exclude(String) | Geeft een enkele CSS-selector op om bepaalde HTML-inhoud uit te sluiten tijdens de analyse. |
| exclude(List<String>) | Geeft een CSS-iframe-selector op om bepaalde HTML-inhoud uit te sluiten tijdens de analyse. |
| exclude(FromFrames) | Sluit een element uit binnen een of meer geneste iframes. |
| exclude(FromShadowDom) | Sluit een element uit binnen een of meer geneste shadow DOM-bomen. |
| exclude(Object) | Sluit een selector uit die als een enkel object is opgegeven. |
| exclude(Object...) | Sluit een selector uit die CSS-selectors, framecontext en shadow DOM-context combineert. |
| include(String) | Geeft een enkele CSS-selector op die HTML-inhoud omvat tijdens de analyse. |
| include(List<String>) | Geeft een CSS-iframe-selector op die HTML-inhoud omvat tijdens de analyse. |
| include(FromFrames) | Omvat een element binnen een of meer geneste iframes. |
| include(FromShadowDom) | Omvat een element binnen een of meer geneste shadow DOM-bomen. |
| include(Object) | Omvat een selector die als een enkel object is opgegeven. |
| include(Object...) | Omvat een selector die CSS-selectors, framecontext en shadow DOM-context combineert. |
| setLegacyMode | Stel de legacy-modus in om toegankelijkheidsproblemen uit te sluiten die kunnen optreden in cross-domain frames en iframes. |
| withAxeSource(File) | Bied een aangepaste versie van axe-core met gebruik van een File object. |
| metAxeBron(String) | Bied een aangepaste versie van axe-core door gebruik te maken van een String object. |
| metAlleenBestPracticeRegels | Controleert toegankelijkheid met alleen de best-practice regels. |
| metAlleenExperimenteleRegels | Controleert toegankelijkheid met alleen de experimentele regels. |
| metRegels | Beperk de toegankelijkheidsregels tot de gespecificeerde regels. |
| withTags | Beperk de gecontroleerde toegankelijkheidsregels tot de opgegeven lijst met tags. |
analyseren
Analyseer de Playwright-pagina (gespecificeerd bij het aanmaken van het AxePlaywrightBuilder object) en retourneer een AxeResults object van de voltooide analyse.
AxeResults AxePlaywrightBuilder.analyze();Retourneert
AxeResults
Voorbeeld
Het volgende codevoorbeeld demonstreert hoe de analyse-methode te gebruiken.
AxePlaywrightBuilder axePlaywrightBuilder = new AxePlaywrightBuilder(page);
AxeResults axeResults = axePlaywrightBuilder.analyze();
/* Usage may include:
axeResults.getViolations() - returns only violation results
axeResults.getPasses() - returns only pass results
axeResults.getIncomplete() - returns only incomplete results
*/configureer(Bestand)
Bied een aangepaste configuratie aan axe-core via een JSON-bestand.
public AxePlaywrightBuilder configure(File axeConfigure);Voor meer informatie over het formaat van het configuratiebestand, zie axe-core configuratie.
Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| bestand | File |
Een File object dat een axe-core configuratie in JSON vertegenwoordigt. |
Voorbeeld
Het volgende voorbeeld toont hoe toegang te krijgen tot een configuratie en deze te gebruiken met een AxePlaywrightBuilder object.
File myAxeConfigure = new File("./axe-configure.json");
AxePlaywrightBuilder axePlaywrightBuilder = new AxePlaywrightBuilder(page)
.configure(myAxeConfigure);
configureer(Tekenreeks)
Bied een aangepaste configuratie aan axe-core (de onderliggende technologie voor het analyseren van toegankelijkheid) aan via een JSON-tekenreeks.
public AxePlaywrightBuilder configure(String axeConfigure);Voor meer informatie over het formaat van het configuratiebestand, zie axe-core configuratie.
Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| axeConfig | String |
Een String object dat een axe-core configuratie in JSON vertegenwoordigt. |
Voorbeeld
Het volgende voorbeeld toont hoe toegang te krijgen tot een configuratie en deze te gebruiken met een AxePlaywrightBuilder object.
String myAxeConfigure = "{..}"
AxePlaywrightBuilder axePlaywrightBuilder = new AxePlaywrightBuilder(page)
.configure(myAxeConfigure);uitschakelRegels
Schakel regels uit die tijdens de analyse worden uitgevoerd.
public AxePlaywrightBuilder disableRules(List<String> rules);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| regels | Lijst<String> | Een lijst van tekenreeksen die regels vertegenwoordigen om uit te schakelen tijdens de analyse. |
Retourneert
AxePlaywrightBuilder
Voorbeeld
Het volgende voorbeeld laat zien hoe je toegankelijkheidscontrole voor een enkele regel kunt uitschakelen met de singletonList-methode van de Collections-klasse en meerdere regels kunt uitschakelen met een List.
// Single Rule
AxePlaywrightBuilder axePlaywrightBuilder1 = new AxePlaywrightBuilder(page)
.disableRules(Collections.singletonList("color-contrast"));
// Multiple Rules
AxePlaywrightBuilder axePlaywrightBuilder2 = new AxePlaywrightBuilder(page)
.disableRules(Arrays.asList("color-contrast", "image-alt"));exclude(String)
Geef een enkele CSS-selector op om HTML-elementen uit te sluiten tijdens de analyse. Om verschillende niet-gerelateerde delen van de pagina over te slaan, roep exclude eenmaal aan voor elk, waarbij elke keer een enkele selector wordt doorgegeven.
public AxePlaywrightBuilder exclude(String selector);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| selector | String |
Een CSS-selector die specifieke elementen aanduidt die niet in een toegankelijkheidsanalyse worden opgenomen. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld laat zien hoe je elementen kunt uitsluiten van de analyse met de volgende attributen:
class="some-class"class="some-other-class"
new AxePlaywrightBuilder(page)
.exclude(".some-class")
.exclude(".some-other-class");exclude(List<String>)
Geef een CSS-iframe-selector op om HTML-elementen uit te sluiten tijdens de analyse.
public AxePlaywrightBuilder exclude(List<String> excludeCSS);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| excludeCSS | List<String> |
Een CSS-iframe-selector. Elke selector behalve de laatste komt overeen met één niveau van iframenesting; de laatste komt overeen met het element dat binnen het meest geneste iframe moet worden overgeslagen. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld laat zien hoe je elementen kunt uitsluiten met CSS-iframe-selectoren.
// To exclude everything within html of parent-iframe
new AxePlaywrightBuilder(page)
.exclude(Arrays.asList("#parent-iframe", "#html"))Omdat er geen exclude(String...) overload is, levert het doorgeven van meer dan één string aan exclude ook een enkele iframe-selector op in plaats van afzonderlijke uitsluitingen. De volgende aanroep komt neer op exclude(Object...) en betekent hetzelfde als het bovenstaande voorbeeld.
new AxePlaywrightBuilder(page)
.exclude("#parent-iframe", "#html")exclude(FromFrames) drukt hetzelfde explicieter uit en is de aanbevolen vorm voor nieuwe tests.
exclude(FromFrames)
Sluit een element uit binnen een of meer geneste iframes, met een expliciete FromFrames selector.
public AxePlaywrightBuilder exclude(FromFrames fromFrames);Importeer de klasse met import com.deque.html.axecore.args.FromFrames;.
Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| fromFrames | FromFrames |
Een selector opgebouwd uit één CSS-selector per niveau van iframenesting, gevolgd door een selector voor het element dat binnen het meest geneste iframe moet worden overgeslagen. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld slaat het formulier binnen het #payment-frame iframe over.
new AxePlaywrightBuilder(page)
.exclude(new FromFrames("#payment-frame", "form"))exclude(FromShadowDom)
Sluit een element uit binnen een of meer geneste shadow DOM-bomen, met een expliciete FromShadowDom selector.
public AxePlaywrightBuilder exclude(FromShadowDom fromShadowDom);Importeer de klasse met import com.deque.html.axecore.args.FromShadowDom;.
Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| fromShadowDom | FromShadowDom |
Een selector opgebouwd uit één CSS-selector per shadow host, gevolgd door een selector voor het element dat binnen de meest geneste schaduwroot moet worden overgeslagen. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld slaat het #search formulier over binnen de schaduwroot die aan .app-header is gekoppeld.
new AxePlaywrightBuilder(page)
.exclude(new FromShadowDom(".app-header", "form#search"))exclude(Object)
Sluit een selector uit die als een enkel object is opgegeven. Deze overload wordt alleen geselecteerd wanneer het statische type van het argument niet een van de bovenstaande typen is, zoals een variabele verklaard als Object. Geef de voorkeur aan de getypeerde overloads.
public AxePlaywrightBuilder exclude(Object selector);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| selector | Object |
Een CSS-selectorketen, een lijst van ketens, een FromFrames selector of een FromShadowDom selector. |
Retourneert
AxePlaywrightBuilder
exclude(Object...)
Sluit een selector uit die gewone CSS-selectors mixt met FromFrames of FromShadowDom selectors, voor gevallen die de andere overloads niet kunnen uitdrukken.
public AxePlaywrightBuilder exclude(Object... selector);Deze overload wordt gekozen wanneer de oproep meer dan één argument doorgeeft. Het doorgeven van een enkele FromFrames of FromShadowDom selecteert in plaats daarvan exclude(FromFrames) of exclude(FromShadowDom).
Om een iframe te bereiken dat zich in een schaduw-root bevindt, moet de FromShadowDom selector genest zijn binnen de FromFrames selector. Het omgekeerde veroorzaakt een fout.
Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| selector | Object... |
Een gemengde set van CSS-selectors en selectorobjecten die één enkel pad naar het over te slaan element vormen. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld slaat .target over in de schaduw-root die gekoppeld is aan #host, binnen het #frame iframe.
new AxePlaywrightBuilder(page)
.exclude("#frame", new FromShadowDom("#host", ".target"))include(String)
Specificeer een enkele CSS-selector om tijdens de analyse op te nemen. Om verschillende niet-gerelateerde delen van de pagina te testen, roept u include één keer per stuk aan, waarbij u elke keer een enkele selector doorgeeft.
public AxePlaywrightBuilder include(String selector);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| selector | String |
Een CSS-selector die elementen specificeert die zullen worden opgenomen in een toegankelijkheidsanalyse. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld laat zien hoe je twee verschillende klassen in de analyse opneemt. Let op hoe het voorbeeld methodechaining gebruikt om meer dan één CSS-klasse te specificeren.
new AxePlaywrightBuilder(page)
.include(".some-class")
.include(".some-other-class");include(List<String>)
Specificeer een CSS-iframe-selector om tijdens de analyse op te nemen.
public AxePlaywrightBuilder include(List<String> includeCSS);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| includeCSS | List<String> |
Een CSS-iframe-selector. Elke selector behalve de laatste komt overeen met één niveau van iframe-nesting; de laatste komt overeen met het te testen element binnen de binnenste iframe. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld laat zien hoe je elementen kunt opnemen met CSS-iframe-selectoren.
// To include everything within html of parent-iframe
new AxePlaywrightBuilder(page)
.include(Arrays.asList("#parent-iframe", "#html"))Omdat er geen include(String...) overload is, resulteert het doorgeven van meer dan één string aan include ook in een enkele iframe-selector in plaats van afzonderlijke includes. De volgende oproep wordt opgelost naar include(Object...) en betekent hetzelfde als het voorbeeld hierboven.
new AxePlaywrightBuilder(page)
.include("#parent-iframe", "#html")include(FromFrames) drukt hetzelfde explicieter uit en is de aanbevolen vorm voor nieuwe tests.
include(FromFrames)
Neem een element op binnen een of meer geneste iframes, door gebruik te maken van een expliciete FromFrames selector.
public AxePlaywrightBuilder include(FromFrames fromFrames);Importeer de klasse met import com.deque.html.axecore.args.FromFrames;.
Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| fromFrames | FromFrames |
Een selector opgebouwd uit één CSS-selector per niveau van iframe-nesting, gevolgd door een selector voor het element dat moet worden getest binnen de binnenste iframe. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld test het formulier binnen het #payment-frame iframe.
new AxePlaywrightBuilder(page)
.include(new FromFrames("#payment-frame", "form"))include(FromShadowDom)
Neem een element op binnen een of meer geneste schaduw-DOM-bomen, door gebruik te maken van een expliciete FromShadowDom selector.
public AxePlaywrightBuilder include(FromShadowDom fromShadowDom);Importeer de klasse met import com.deque.html.axecore.args.FromShadowDom;.
Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| fromShadowDom | FromShadowDom |
Een selector opgebouwd uit één CSS-selector per schaduw-host, gevolgd door een selector voor het element dat moet worden getest binnen de binnenste schaduw-root. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld test de #search vorm binnen de schaduw-root die gekoppeld is aan .app-header.
new AxePlaywrightBuilder(page)
.include(new FromShadowDom(".app-header", "form#search"))include(Object)
Neem een selector op die is opgegeven als een enkel object. Deze overload wordt alleen geselecteerd wanneer het statische type van het argument niet een van de bovenstaande types is, zoals een variabele die is gedeclareerd als Object. Geef de voorkeur aan de getypeerde overloads.
public AxePlaywrightBuilder include(Object selector);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| selector | Object |
Een CSS-selectorketen, een lijst van ketens, een FromFrames selector of een FromShadowDom selector. |
Retourneert
AxePlaywrightBuilder
include(Object...)
Neem een selector op die gewone CSS-selectors mixt met FromFrames of FromShadowDom selectors, voor gevallen die de andere overloads niet kunnen uitdrukken.
public AxePlaywrightBuilder include(Object... selector);Deze overload wordt gekozen wanneer de oproep meer dan één argument doorgeeft. Het doorgeven van een enkele FromFrames of FromShadowDom selecteert in plaats daarvan include(FromFrames) of include(FromShadowDom).
Om een iframe te bereiken dat zich in een schaduw-root bevindt, moet de FromShadowDom selector genest zijn binnen de FromFrames selector. Het omgekeerde veroorzaakt een fout.
Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| selector | Object... |
Een gemengde set van CSS-selectors en selectorobjecten die één enkel pad vormen naar het te testen element. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld test .target in de schaduw-root die gekoppeld is aan #host, binnen het #frame iframe.
new AxePlaywrightBuilder(page)
.include("#frame", new FromShadowDom("#host", ".target"))setLegacyMode
Sluit toegankelijkheidsproblemen uit die kunnen optreden in cross-domein frames en iframes.
public AxePlaywrightBuilder setLegacyMode(boolean legacyMode);Deze API wordt naar verwachting verwijderd in de volgende versie van Axe DevTools.
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld schakelt de legacy-modus in.
new AxePlaywrightBuilder(page)
.setLegacyMode(true);withAxeSource(File)
Bied een aangepaste versie van axe-core aan met behulp van Java's File-object
public AxePlaywrightBuilder withAxeSource(File file);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| bestand | File |
Een bestand met JavaScript dat axe-core implementeert. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld toont hoe u een ander bestand kunt gebruiken voor axe-core in plaats van de meegeleverde versie. Dit hoeft u alleen in speciale gevallen te doen.
File axeLegacySource = new File("somepath/axe-core@legacy.js");
new AxePlaywrightBuilder(page)
.withAxeSource(axeLegacySource);metAxeBron(String)
Geef een aangepaste versie van axe-core met een al geparseerde bron
public AxePlaywrightBuilder withAxeSource(String src);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| src | String |
Het JavaScript-bronbestand vertegenwoordigd als een String. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld toont hoe u een bestand in een String leest en dat gebruikt als het bronbestand met withAxeSource.
String source = IOUtils.toString(somepPath.toURI(), StandardCharsets.UTF_8);
new AxePlaywrightBuilder(page)
.withAxeSource(source);metAlleenBestPracticeRegels
Controleer op toegankelijkheidsproblemen met alleen de best-practice-regelset ingeschakeld.
public AxePlaywrightBuilder withOnlyBestPracticeRules();Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld toont hoe u toegankelijkheidsanalyse kunt inschakelen met alleen de best practice regels.
new AxePlaywrightBuilder(page)
.withOnlyBestPracticeRules();
metAlleenExperimenteleRegels
Controleer op toegankelijkheidsproblemen met alleen de experimentele regelset ingeschakeld
public AxePlaywrightBuilder withOnlyExperimentalRules();Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld toont hoe u toegankelijkheidsanalyse kunt inschakelen met alleen de experimentele regels.
new AxePlaywrightBuilder(page)
.withOnlyExperimentalRules();
metRegels
Beperk de regels die tijdens de toegankelijkheidsanalyse worden uitgevoerd tot de gespecificeerde.
public AxePlaywrightBuilder exclude(List<String> rules);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| regels | List<String> |
Een lijst met regels die voor toegankelijkheidsanalyse worden gebruikt. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Het volgende voorbeeld toont twee verschillende manieren om de withRules methode te gebruiken. De eerste maakt een List met één regel, kleurcontrast. De tweede maakt een List met de regels kleurcontrast en afbeelding-alt.
// Single Rule
new AxePlaywrightBuilder(page)
.withRules(Collections.singletonList("color-contrast"));
// Multiple Rules
new AxePlaywrightBuilder(page)
.withRules(Arrays.asList("color-contrast", "image-alt"));withTags
Beperkt de toegankelijkheidsanalyse tot de regels of regensets die behoren tot de gespecificeerde tags.
public AxePlaywrightBuilder withTags(List<String> tags);Parameters
| Naam | Type | Beschrijving |
|---|---|---|
| tags | List<String> |
Een lijst van tags die de regels bevatten die u wilt opnemen in de toegankelijkheidsanalyse. |
Retourneert
AxePlaywrightBuilder
Voorbeelden
Dit voorbeeld laat zien hoe je de toegankelijkheidsanalyse kunt beperken tot regels die behoren tot de gespecificeerde tags. De eerste codefragment toont hoe de analyse kan worden beperkt tot regels die deel uitmaken van de wcag21aa specificatie. Het tweede fragment toont hoe de analyse kan worden beperkt tot de wcag21aa specificatie en de best-practice regels.
// Single tag
new AxePlaywrightBuilder(page)
.withTags(Collections.singletonList("wcag21aa"));
// Multiple tags
new AxePlaywrightBuilder(page)
.withTags(Arrays.asList("wcag21aa", "best-practice"));