如何与具有这样 id 的元素进行交互:"inputText115:3551;a" 使用 Selnium + webdriverIO + nodeJS

How to interact with an element with an id like this: "inputText115:3551;a" using Selnium + webdriverIO + nodeJS

我有一个元素在 Sales-Force Lightening 应用程序中,它是一个 HTML 应用程序。该元素是一个文本字段。

我需要将数据获取到测试字段中。这是文本字段的id(如下):

inputText115:3551;a

我遇到的问题是:“3551”也可能是 "WXYZ" 或 "ABCD",因为这个值是由应用程序(和 Sales-Force Lightening在他们的应用程序中到处都是这样的)。这使得很难用 selenium 对其进行测试,因为根据浏览器和会话 ID,此值会发生变化。

到目前为止我还没能做到。 我试过:

.click('[href="#/sObject/0012C000004TMmQQAW/view"]') <-- by href
.click('/html/body/div[5]/div[1]/section/div[1]/div[1]/div[2]/div/div/div[2]/div[1]/div/div[2]/div/div[4]/div/div/div[1]/table/tbody/tr[1]/th/span/a')  <-- by xpath

到目前为止,我没有任何效果。

我如何 interact/select 使用具有动态 ID 的 NodeJS 中的 selenium 元素?


也许您可以尝试获取动态更改其 ID 的父元素,然后使用其他属性 class 或标签名称来获取它。

我知道你的问题是关于节点的,但我会在 java 中举一个例子,因为这是我尝试过的 Selenium,我认为这个想法在这里对你有用。

即对于以下 HTML 假设您有一个 div 元素作为您的 input 元素的父元素:

<div id="myDiv">
    <input type="text" id="inputText115:3551;a">
</div>

您可以像这样通过它的父元素进行一些导航:

WebElement parentElement = driver.findElement(By.id("myDiv"));
parentElement.findElement(By.tagName("input")).click(); //here you're clicking the element with the changing ID

您可以指定一些 select 或 select 所有具有 ID 的元素,然后使用正则表达式过滤正确的元素。一些有用的提示:

Google Chrome 在“元素”选项卡上右键单击某个元素时,开发人员控制台会提供简洁的选项:

  • 复制>
    • 复制select或(对于css)
    • 复制 XPath

但是在您的情况下,这些可能无济于事,因为它们会搜索具有 ID 节点的最近的父节点并使用该节点的相对路径。

您可以在控制台中使用 XPath 和 CSS selector 进行试验:Chrome Dev Console 在范围内有两个函数:$$$x.第一个可以用来测试CSS selectors,第二个可以用来测试XPath.

如果您在输入字段之前有一个标签,您可以使用标签文本找到。通常标签后面的第一个输入标签是它的文本框

<div id="myDiv">
    <label class="label" id="usernamelabel">Username</label>
    <input type="text" id="inputText115:3551;a">
</div>

您可以使用

找到它

driver.findElement(By.xpath("//*[text() = 'Username']/following::input[1]"));