如何将文本发送到具有多个类名实例的输入元素

Posted

技术标签:

【中文标题】如何将文本发送到具有多个类名实例的输入元素【英文标题】:How to send text to an input element with multiple instances of the classname 【发布时间】:2022-01-23 06:02:26 【问题描述】:

使用 selenium v​​ba 我正在尝试获取 searchInput 类名的第三个实例并将其发送到它。我可以通过使用 xpath 得到它,

bot.FindElementByXPath("/html/body/div[9]/div[1]/div/div[1]/input").SendKeys ("test ")

问题在于 body div 有时是 9,有时是 11,有时是 7,依此类推。

我试过了:

set parentSearch = bot.findElementByCSS(".searchInput")
parentSearch(3).sendKeys("test")

bot.findElementByCSS(".searchInput")(3).sendkeys("test")

和其他各种

<div class="cdk-live-announcer-element cdk-visually-hidden" aria-atomic="true" aria-live="polite"></div>
> <div id="cdk-describedby-message-container" class="cdk-visually-hidden" style="visibility: hidden;">.</div>
<div class="cdk-overlay-container"></div>
> <div class="tutorial-popup-container">...</div>
<div id="svgProviderContainer" style="display: none;"></div>
<div style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: Opx; padding: Opx; width:
200px;">...</div>
><div class="slicer-dropdown-popup visual" focus-nav-mode="Group" style="background-color: rgb(26, 26, 26);">...</div>
<div class="slicer-dropdown-popup visual" focus-nav-mode="Group" style="background-color: rgb(26, 26, 26); width: 101.625px; transform: scale(0.572222); left: 378.722
px; top: 120.944px; transform-origin: left top; display: none;"> == $0
<div class="slicer-dropdown-content"> flex
<div class="slicerContainer isMultiSelectEnabled"> flex

(not in html-the below block)
<div class="searchHeader show" style="color: rgb(255, 255, 255); border-color: rgb(200, 200, 200); background: rgb(26, 26, 26);"> flex
<span class="powervisuals-glyph search icon searchIcon" title="Search" style="color: rgb(255, 255, 255);"X</span>
<input type="text" aria-label="Search" placeholder="Search" spellcheck="false" class="search Input" drag-resize-disabled="true" style="background: rgb(26, 26,
26); color: rgb(255, 255, 255); font-size: 10.6667px; font-family: Tahoma;" pbi-focus-tracker-idx="9">
</div>

HTML 快照:

【问题讨论】:

您是否有意/手动在 HTML 中添加了一些额外的 &gt; 字符? 我在►中添加了指向它。我更改了它以使其更清晰。 该类与您在代码 v html v 图像中显示的不同。应该是FindElementByCss(".searchInput") 从头开始,我明白你的意思。我在问题中纠正了它。我写这个问题的时候把它换了。 【参考方案1】:

要向元素发送字符序列,您可以使用以下任一Locator Strategies:

使用FindElementByCss

bot.FindElementsByCss("input.searchInput[aria-label='Search'][placeholder='Search']")([3]).sendkeys("test")

使用FindElementByXPath

bot.FindElementsByXPath("//input[@class='searchInput' and @aria-label='Search'][@placeholder='Search']")([3]).sendkeys("test")

【讨论】:

谢谢。这确实有效,但它适用于第一个实例。它在页面上使用了 14 次,我想针对第 3 次。 @DebanjanB 我会说 bot.FindElementByCss("input.searchInput[aria-label='Search'][placeholder='Search']")(3).sendkeys("test") 吗?第三个实例的正确说法是什么? @Red 查看更新的答案并告诉我状态。 它说错误预期语句结束。所以我尝试了bot.FindElementsByXPath("//input[@class='searchInput' and @aria-label='Search'][@placeholder='Search']")([3]).SendKeys ("test"),它成功了!!!您会更新该语法,以便我可以将答案标记为正确。谢谢你的帮助!@DebanjanB @Red 更新了答案。很高兴能为您提供帮助。请accept answer 点击我的 answer 旁边的空心刻度线,它就在 votedown 箭头下方,这样刻度线就会转动绿色.

以上是关于如何将文本发送到具有多个类名实例的输入元素的主要内容,如果未能解决你的问题,请参考以下文章

将 url 参数发送到通用视图,该视图将其发送到 ModelForm 中的元素

将 DHT 公告发送到哪里?

如何将变量从 JavaScript 函数发送到文本框? [复制]

如何使用烧瓶将多个参数发送到路由?

如何正确地将具有多个元素的新对象推送到数组中?

将图像链接发送到电报而不显示图像 url