0

我有一个位于 HTML 应用程序的 Sales-Force Lightening 应用程序中的元素。该元素是一个文本字段。

我需要将数据输入测试字段。这是文本字段的 id(如下):

inputText115:3551;a

我遇到的问题是:“3551”也可能是“WXYZ”或“ABCD”,因为这个值是由应用程序生成的动态值(并且销售人员的闪电在他们的应用程序中到处都是这个) . 使用 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

到目前为止,没有什么对我有用。

如何使用具有动态 ID 的 NodeJS 在 selenium 中交互/选择元素?

4

3 回答 3

2


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

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

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

<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
于 2017-02-15T18:10:57.070 回答
1

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

<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]"));

于 2017-02-15T19:04:33.020 回答
1

您要么指定一些选择器,要么选择具有 ID 的所有元素并使用正则表达式过滤正确的元素。一些有用的提示:

右键单击“元素”选项卡上的元素时,Google Chrome 开发者控制台提供了简洁的选项:

  • 复制 >
    • 复制选择器(用于 css)
    • 复制 XPath

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

您可以在控制台中试验 XPath 和 CSS 选择器:Chrome 开发控制台在范围内有两个功能:$$$x. 第一个可用于测试 CSS 选择器,第二个可用于测试 XPath。

于 2017-02-15T18:19:02.980 回答