如何与具有这样 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]"));
我有一个元素在 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]"));