以下内容似乎不适用于角度形式
document.querySelector(TEXTAREA_SELECTOR).value = "some text"
我尝试过
.title
、.name
或.innerText
,但似乎都不起作用。
我也尝试过:
document.querySelector(TEXTAREA_SELECTOR).dispatchEvent(new KeyboardEvent('keypress',{'key':'A'}));
或
document.querySelector(TEXTAREA_SELECTOR).focus()
document.dispatchEvent(new KeyboardEvent('keypress',{'key':'A'}));
在后端正在发送
InputEvent
,但我不知道如何触发它:
{
isTrusted: true
bubbles: true
cancelBubble: false
cancelable: false
composed: true
currentTarget: textarea#formly_14_textarea_description_1.form-control.ng-touched.ng-dirty.ng-valid
data: "some text"
dataTransfer: null
defaultPrevented: false
detail: 0
eventPhase: 2
inputType: "insertText"
isComposing: false
returnValue: true
sourceCapabilities: null
srcElement: textarea#formly_14_textarea_description_1.form-control.ng-touched.ng-dirty.ng-valid
target: textarea#formly_14_textarea_description_1.form-control.ng-
touched.ng-dirty.ng-valid
timeStamp: 1594480
type: "input"
view: null
which: 0
[[Prototype]]: InputEvent
}
这是一个相关的问题,但他们是通过应用程序源代码来完成的,我是通过外部代码(即selenium/浏览器扩展/开发控制台)来完成的,所以我无权访问
ng-model
对象。
这是我试图与之交互的 html 表单,在文本区域中输入时,html 似乎没有任何变化。 Js 事件被触发,但跟踪那些混淆的代码超出了我的能力范围。 id=
textarea
的 formly_14_textarea_description_1
是我想要设置的。
<form elementtiming="1634" _ngcontent-tss-c128="" novalidate="" class="spacer-xl-bottom ng-dirty ng-touched ng-valid">
<div elementtiming="1635" _ngcontent-tss-c128="" class="aria-hidden-on-modalopen language-origin">
<df-form elementtiming="1636" _ngcontent-tss-c128="">
<form elementtiming="1643" novalidate="" class="ng-dirty ng-touched ng-valid">
<formly-form elementtiming="1644">
<formly-field elementtiming="1647" hide-deprecation="" class="input-field">
<vertical-view-wrapper elementtiming="1649">
<div elementtiming="1650" class="section form-group">
<div elementtiming="1651" class="spacer-ml-top spacer-xxs-bottom">
<div elementtiming="1652" class="spacer-xxs-bottom section-title">
<b elementtiming="1653">Extension name</b>
<b elementtiming="1656" aria-hidden="true" class="win-color-fg-red"> *</b>
</div>
<div elementtiming="1654" class="spacer-sm-bottom field-description">This is taken from your package manifest. To edit the text, update the manifest in your package and reupload it.</div>
</div>
<div elementtiming="1655">
<formly-field-input elementtiming="1657">
<input elementtiming="1658" class="form-control ng-untouched ng-pristine" type="text" disabled="disabled" aria-label="Extension name" id="formly_14_input_title_0" required="required">
</formly-field-input>
</div>
</div>
</vertical-view-wrapper></formly-field>
<formly-field elementtiming="1648" hide-deprecation="" class="textarea-field spacer-ml-top"><vertical-view-wrapper elementtiming="1659">
<div elementtiming="1660" class="section form-group">
<div elementtiming="1661" class="spacer-ml-top spacer-xxs-bottom">
<div elementtiming="1662" class="spacer-xxs-bottom section-title">
<b elementtiming="1663">Description </b>
<b elementtiming="1666" aria-hidden="true" class="win-color-fg-red"> *</b>
</div>
<div elementtiming="1664" class="spacer-sm-bottom field-description">Tell customers what your extension does.</div>
</div>
<div elementtiming="1665">
<formly-field-textarea elementtiming="1670">
<textarea elementtiming="1671" class="form-control ng-dirty ng-touched ng-valid" cols="1" rows="1" aria-label="Description, tell customers what your extension does." id="formly_14_textarea_description_1" required="required" maxlength="10000">
</textarea>
</formly-field-textarea>
</div>
</div>
</vertical-view-wrapper>
</formly-field>
</formly-form>
</form>
</df-form>
</div><app-logos elementtiming="1637" _ngcontent-tss-c128="" label="Logos" _nghost-tss-c125="">
<section elementtiming="1673" _ngcontent-tss-c125="" class="section aria-hidden-on-modalopen">
<header-section elementtiming="1674" _ngcontent-tss-c125="">
<header elementtiming="1675" class="section-header spacer-xxs-top">
<div elementtiming="1676" class="header-titles">
<div elementtiming="1677" class="titles-outer">
<div elementtiming="1678" class="titles-inner">
<span elementtiming="1679" class="section-title text-maxlines-1">
<span elementtiming="1680" aria-required="true" class="h5" id="Extension logo_header_section">
Extension logo
<span elementtiming="1711" class="win-color-fg-red"> *</span>
</span>
</span>
</div>
</div>
</div>
</header>
</header-section>
<div elementtiming="1681" _ngcontent-tss-c125="" class="section-body">
<div elementtiming="1682" _ngcontent-tss-c125="" class="row">
<div elementtiming="1683" _ngcontent-tss-c125="" class="col-xl-24">
<form elementtiming="1684" _ngcontent-tss-c125="" novalidate="" class="ng-untouched ng-pristine ng-valid">
<div elementtiming="1685" _ngcontent-tss-c125="" class="row form-group-tall promotional-images">
<div elementtiming="1686" _ngcontent-tss-c125="" class="col-xs-24 sub-heading"><span elementtiming="1687" _ngcontent-tss-c125="">Recommended size: 300 x 300 pixels (minimum size 128 x 128 pixels) with aspect ratio 1:1</span>
<button elementtiming="1688" _ngcontent-tss-c125="" class="btn-link btn-link-no-padding spacer-xxs-bottom" aria-label="Preview extension logo">Preview</button>
</div>
<form elementtiming="1689" _ngcontent-tss-c125="" novalidate="" class="ng-untouched ng-pristine ng-valid"><input elementtiming="1690" _ngcontent-tss-c125="" type="file" name="fileuploader" class="fileuploader" accept=".png"></form>
<div elementtiming="1691" _ngcontent-tss-c125="" class="col-xs-24">
<div elementtiming="1701" _ngcontent-tss-c125="" class="listing-image-container small-listing-container">
<div elementtiming="1702" _ngcontent-tss-c125="" class="listing-image-inner rbtn">
<div elementtiming="1703" _ngcontent-tss-c125="" class="image-box"><img elementtiming="1704" _ngcontent-tss-c125="" class="listingImage assetImage" alt="Extension Store logo logo.png" src="https://ingestionpackagesprod1.blob.core.windows.net:443/file/3001408932431984139?09%2f21%2f2023+17%3a34%3a56&sv=2018-03-28&sr=b&sig=0Kyd3WdD5ViRUAP66fspl4A2AP5H%2bjy1nKNhlNO%2bX7g%3d&se=2023-09-22T12%3a51%3a53Z&sp=rl">
<div elementtiming="1705" _ngcontent-tss-c125="" class="asset-overlay win-color-bg-0 color-alt"></div>
<div elementtiming="1706" _ngcontent-tss-c125="" class="asset-action-icons">
<button elementtiming="1707" _ngcontent-tss-c125="" class="icon-button magnify" aria-label="Magnify">
<span elementtiming="1708" _ngcontent-tss-c125="" class="win-icon win-icon-ZoomIn win-color-fg-primary color-alt win-icon-size-ml">
</span>
</button>
<button elementtiming="1709" _ngcontent-tss-c125="" class="icon-button spacer-ml-left" aria-label="Delete">
<span elementtiming="1710" _ngcontent-tss-c125="" class="win-icon win-icon-Delete win-color-fg-primary color-alt win-icon-size-ml">
</span>
</button>
</div>
</div>
</div>
</div>
<div elementtiming="1696" _ngcontent-tss-c125="" class="image-box upload-placeholder win-color-bg-10" hidden="">
<div elementtiming="1697" _ngcontent-tss-c125="" class="image-upload-placeholder-box assetImage"><img elementtiming="1698" _ngcontent-tss-c125="" src="/dashboard/microsoftedge/staticres/assets/uploadPlaceholder.png">
</div>
</div>
<button elementtiming="1699" _ngcontent-tss-c125="" class="btn-link btn-link-no-padding btn-texticon ltr"><span elementtiming="1700" _ngcontent-tss-c125="" class="win-icon win-icon-Copy">
</span>Duplicate this logo for all languages
</button>
</div>
<div elementtiming="1692" _ngcontent-tss-c125="" class="col-xs-24">
<ul elementtiming="1693" _ngcontent-tss-c125="" class="bulleted-list win-color-fg-secondary text-caption">
<li elementtiming="1694" _ngcontent-tss-c125="">
</li>
<li elementtiming="1695" _ngcontent-tss-c125="">
</li>
</ul>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
<span elementtiming="1672" _ngcontent-tss-c125="" aria-label="Logo deleted successfully"></span>
</app-logos><promo-tiles elementtiming="1638" _ngcontent-tss-c128="" size="Small" _nghost-tss-c126="">
<section elementtiming="1712" _ngcontent-tss-c126="" class="section aria-hidden-on-modalopen"><header-section elementtiming="1713" _ngcontent-tss-c126="">
<header elementtiming="1714" class="section-header spacer-xxs-top">
<div elementtiming="1715" class="header-titles">
<div elementtiming="1716" class="titles-outer">
<div elementtiming="1717" class="titles-inner"><span elementtiming="1718" class="section-title text-maxlines-1"><span elementtiming="1719" aria-required="true" class="h5" id="Small promotional tile_header_section">Small promotional tile</span></span></div>
</div>
</div>
</header>
</header-section>
<div elementtiming="1720" _ngcontent-tss-c126="" class="section-body">
<div elementtiming="1721" _ngcontent-tss-c126="" class="row">
<div elementtiming="1722" _ngcontent-tss-c126="" class="col-xl-24">
<form elementtiming="1723" _ngcontent-tss-c126="" novalidate="" class="ng-untouched ng-pristine ng-valid">
<div elementtiming="1724" _ngcontent-tss-c126="" class="row form-group-tall promotional-images">
<div elementtiming="1725" _ngcontent-tss-c126="" class="col-xs-24 sub-heading">
<p elementtiming="1735" _ngcontent-tss-c126="" class="remove-bottom-margin" id="Small_tile_size">Size: 440 x 280 pixels</p><he-button elementtiming="1726" _ngcontent-tss-c126="" appearance="link" class="btn-link spacer-xxs-bottom he-button" aria-label="Preview Small promotional tile" type="button">Preview</he-button>
</div>
<div elementtiming="1727" _ngcontent-tss-c126="" class="col-xs-24">
<ul elementtiming="1728" _ngcontent-tss-c126="" class="sortable listing-image-container row"><!---->
<li elementtiming="1729" _ngcontent-tss-c126="" class="image-upload-container upload-placeholder win-color-bg-10" hidden="" aria-label="Screenshot image is uploading">
<div elementtiming="1730" _ngcontent-tss-c126="" class="image-upload-placeholder-box thumbnail-image"><img elementtiming="1731" _ngcontent-tss-c126="" src="/dashboard/microsoftedge/staticres/assets/uploadPlaceholder.png"></div>
</li>
</ul>
<div elementtiming="1736" _ngcontent-tss-c126="">
<form elementtiming="1737" _ngcontent-tss-c126="" novalidate="" class="ng-untouched ng-pristine ng-valid"><input elementtiming="1738" _ngcontent-tss-c126="" type="file" name="fileuploader" class="fileuploader" accept=".png"></form><he-button elementtiming="1740" _ngcontent-tss-c126="" appearance="secondary" class="he-button small-promo-tile" id="add_Small_tile_button" aria-label="Add image for Small promotional tile. Size: 440 x 280 pixels" type="button">Add Image</he-button>
</div>
</div>
<div elementtiming="1732" _ngcontent-tss-c126="" class="col-xs-24">
<ul elementtiming="1733" _ngcontent-tss-c126="" class="bulleted-list win-color-fg-secondary text-caption hidden">
<li elementtiming="1739" _ngcontent-tss-c126=""> 440 x 280 pixels </li>
<li elementtiming="1734" _ngcontent-tss-c126=""></li>
</ul>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
</promo-tiles>
<screenshots elementtiming="1639" _ngcontent-tss-c128="" label="Screenshots" _nghost-tss-c127=""><!---->
<section elementtiming="1743" _ngcontent-tss-c127="" class="section aria-hidden-on-modalopen">
<header-section elementtiming="1744" _ngcontent-tss-c127="">
<header elementtiming="1745" class="section-header spacer-xxs-top">
<div elementtiming="1746" class="header-titles">
<div elementtiming="1747" class="titles-outer">
<div elementtiming="1748" class="titles-inner"><span elementtiming="1749" class="section-title text-maxlines-1"><span elementtiming="1750" aria-required="true" class="h5" id="Screenshot/s_header_section">Screenshot/s<!----></span><!----></span></div>
</div>
</div>
</header>
</header-section>
<div elementtiming="1751" _ngcontent-tss-c127="" class="section-body">
<div elementtiming="1752" _ngcontent-tss-c127="" class="row">
<div elementtiming="1753" _ngcontent-tss-c127="" class="col-xl-24">
<form elementtiming="1754" _ngcontent-tss-c127="" novalidate="" class="ng-untouched ng-pristine ng-valid">
<div elementtiming="1755" _ngcontent-tss-c127="" class="row">
<div elementtiming="1756" _ngcontent-tss-c127="" class="col-xs-24 sub-heading"><span elementtiming="1757" _ngcontent-tss-c127="">Upto 6 images showing how your extension works. Size: 1280 x 800 pixels or 640 x 400 pixels</span><button elementtiming="1758" _ngcontent-tss-c127="" class="btn-link btn-link-no-padding spacer-xxs-bottom" aria-label="Preview Screenshot/s">Preview</button></div>
<div elementtiming="1759" _ngcontent-tss-c127="" class="col-xs-24">
<ul elementtiming="1760" _ngcontent-tss-c127="" class="sortable listing-image-container row"><!---->
<li elementtiming="1761" _ngcontent-tss-c127="" class="col-xs-8 image-upload-container upload-placeholder" hidden="" aria-label="Screenshot image is uploading">
<div elementtiming="1762" _ngcontent-tss-c127="" class="image-upload-placeholder-box win-color-bg-10"><img elementtiming="1763" _ngcontent-tss-c127="" src="/dashboard/microsoftedge/staticres/assets/uploadPlaceholder.png"></div><!---->
</li>
</ul>
</div>
<div elementtiming="1764" _ngcontent-tss-c127="" class="col-xs-24">
<ul elementtiming="1765" _ngcontent-tss-c127="" class="bulleted-list win-color-fg-secondary text-caption">
<li elementtiming="1767" _ngcontent-tss-c127="">1280 x 800 pixels</li>
<li elementtiming="1768" _ngcontent-tss-c127="">640 x 400 pixels</li>
<!---->
<li elementtiming="1766" _ngcontent-tss-c127="">Accepted file types: .png</li>
</ul>
</div>
</div>
<!---->
<he-button elementtiming="1769" _ngcontent-tss-c127="" id="add_screenshot_button" appearance="secondary" class="spacer-sm-bottom he-button" aria-label="Add image for Screenshot/s. Upto 6 images showing how your extension works. Size: 1280 x 800 pixels or 640 x 400 pixels" type="button">Add Image</he-button><!----><!---->
</form>
</div>
</div>
</div>
<!---->
</section>
<!---->
<form elementtiming="1741" _ngcontent-tss-c127="" novalidate="" class="ng-untouched ng-pristine ng-valid">
<input elementtiming="1742" _ngcontent-tss-c127="" type="file" name="fileuploader" class="fileuploader" accept=".png">
</form>
<!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!---->
</screenshots><promo-tiles elementtiming="1640" _ngcontent-tss-c128="" size="Large" _nghost-tss-c126="">
<section elementtiming="1770" _ngcontent-tss-c126="" class="section aria-hidden-on-modalopen large-tile">
<header-section elementtiming="1771" _ngcontent-tss-c126="">
<header elementtiming="1772" class="section-header spacer-xxs-top">
<div elementtiming="1773" class="header-titles">
<div elementtiming="1774" class="titles-outer">
<div elementtiming="1775" class="titles-inner"><span elementtiming="1776" class="section-title text-maxlines-1"><span elementtiming="1777" aria-required="true" class="h5" id="Large promotional tile_header_section">Large promotional tile<!----></span><!----></span></div>
</div>
</div>
</header>
</header-section>
<div elementtiming="1778" _ngcontent-tss-c126="" class="section-body">
<div elementtiming="1779" _ngcontent-tss-c126="" class="row">
<div elementtiming="1780" _ngcontent-tss-c126="" class="col-xl-24">
<form elementtiming="1781" _ngcontent-tss-c126="" novalidate="" class="ng-untouched ng-pristine ng-valid">
<div elementtiming="1782" _ngcontent-tss-c126="" class="row form-group-tall promotional-images">
<div elementtiming="1783" _ngcontent-tss-c126="" class="col-xs-24 sub-heading">
<p elementtiming="1793" _ngcontent-tss-c126="" class="remove-bottom-margin" id="Large_tile_size">Size: 1400 x 560 pixels</p>
<!---->
<he-button elementtiming="1784" _ngcontent-tss-c126="" appearance="link" class="btn-link spacer-xxs-bottom he-button" aria-label="Preview Large promotional tile" type="button">Preview</he-button>
</div>
<div elementtiming="1785" _ngcontent-tss-c126="" class="col-xs-24">
<ul elementtiming="1786" _ngcontent-tss-c126="" class="sortable listing-image-container row">
<!---->
<li elementtiming="1787" _ngcontent-tss-c126="" class="image-upload-container upload-placeholder win-color-bg-10 large-promo" hidden="" aria-label="Screenshot image is uploading">
<div elementtiming="1788" _ngcontent-tss-c126="" class="image-upload-placeholder-box thumbnail-image"><img elementtiming="1789" _ngcontent-tss-c126="" src="/dashboard/microsoftedge/staticres/assets/uploadPlaceholder.png">
</div>
<!---->
</li>
</ul>
<!---->
<div elementtiming="1794" _ngcontent-tss-c126="">
<form elementtiming="1795" _ngcontent-tss-c126="" novalidate="" class="ng-untouched ng-pristine ng-valid"><input elementtiming="1796" _ngcontent-tss-c126="" type="file" name="fileuploader" class="fileuploader" accept=".png">
</form>
<he-button elementtiming="1798" _ngcontent-tss-c126="" appearance="secondary" class="he-button large-promo-tile" id="add_Large_tile_button" aria-label="Add image for Large promotional tile. Size: 1400 x 560 pixels" type="button">
Add Image
</he-button>
<!---->
</div>
<!----><!----><!----><!----><!---->
</div>
<div elementtiming="1790" _ngcontent-tss-c126="" class="col-xs-24">
<ul elementtiming="1791" _ngcontent-tss-c126="" class="bulleted-list win-color-fg-secondary text-caption hidden">
<li elementtiming="1797" _ngcontent-tss-c126=""> 1400 x 560 pixels </li>
<!---->
<li elementtiming="1792" _ngcontent-tss-c126=""></li>
</ul>
</div>
</div>
<!---->
</form>
</div>
</div>
</div>
<!---->
</section>
<!----><!----><!----><!----><!----><!----><!----><!---->
</promo-tiles>
<div elementtiming="1641" _ngcontent-tss-c128="" class="aria-hidden-on-modalopen">
<df-form elementtiming="1642" _ngcontent-tss-c128="">
<form elementtiming="1645" novalidate="" class="ng-untouched ng-pristine ng-valid">
<formly-form elementtiming="1646"><formly-field elementtiming="1799" hide-deprecation="" class="input-field"><vertical-view-wrapper elementtiming="1801">
<div elementtiming="1802" class="section form-group">
<div elementtiming="1803" class="spacer-ml-top spacer-xxs-bottom">
<div elementtiming="1804" class="spacer-xxs-bottom section-title">
<b elementtiming="1805">YouTube video URL</b><!---->
</div>
<div elementtiming="1806" class="spacer-sm-bottom field-description"></div>
</div>
<div elementtiming="1807"><formly-field-input elementtiming="1808">
<input elementtiming="1809" class="form-control ng-untouched ng-pristine ng-valid" type="text" aria-label="YouTube video URL" id="formly_16_input_urls.VideoUrl[0].url_0" pattern="^(https://(www\.)?youtu\.be/([a-zA-Z0-9\-]|_)+($|\?.*)|https://(www\.)?youtube\.com/watch\?v=([a-zA-Z0-9\-]|_)+($|&).*)" placeholder="Provide a valid URL"><!----><!----></formly-field-input><!----></div><!---->
</div>
</vertical-view-wrapper>
<!---->
</formly-field><formly-field elementtiming="1800" hide-deprecation=""><vertical-view-wrapper elementtiming="1810">
<div elementtiming="1811" class="section form-group">
<div elementtiming="1812" class="spacer-ml-top spacer-xxs-bottom">
<div elementtiming="1813" class="spacer-xxs-bottom section-title">
<b elementtiming="1814">Search terms</b>
<!---->
</div>
<div elementtiming="1815" class="spacer-sm-bottom field-description">Up to 7 terms. 30 character limit for each term. No more than 21 separate words across all search terms.</div>
</div>
<div elementtiming="1816"><app-search-terms elementtiming="1817" _nghost-tss-c149="">
<form elementtiming="1818" _ngcontent-tss-c149="" novalidate="" class="listings-search-terms ng-untouched ng-pristine ng-valid" aria-label="Add Search terms">
<div elementtiming="1819" _ngcontent-tss-c149="" class="spacer-sm-bottom ng-untouched ng-pristine ng-valid">
<div elementtiming="1820" _ngcontent-tss-c149="" class="input-counter" title="30 Characters Left" data-counter="30">
<input elementtiming="1821" _ngcontent-tss-c149="" type="text" class="search-term-input full-width ng-untouched ng-pristine ng-valid" id="last-search-item" aria-label="Search term
1, 30 Characters Left" placeholder="Enter a search term" maxlength="30">
</div>
<button elementtiming="1822" _ngcontent-tss-c149="" role="button" class="btn-link btn-link-no-padding action-link spacer-xxs-left" disabled=""> Add Term </button><!---->
</div>
<!----><!----><!----><!---->
</form>
<!---->
</app-search-terms>
<!---->
</div>
<!---->
</div>
</vertical-view-wrapper>
<!---->
</formly-field>
<!----><!---->
</formly-form>
</form>
</df-form>
</div>
</form>
按照@Eliseo的建议,
改变:
document.querySelector(TEXTAREA_SELECTOR).value = "some text";
至:
document.querySelector(TEXTAREA_SELECTOR).value = "some text";
document.querySelector(TEXTAREA_SELECTOR).dispatchEvent(new Event('input'));
够了