Arrays WebdriverIO中的表行计数
我正在测试一个带有动态webtable的webshop,它可以包含0到100行(订单)。为此,我不得不使用NodeJS和webdrivero,这对我来说都是全新的 我想删除每个具有“打开”状态的订单。我习惯于使用Java,在Java中,我只需将所有适用的WebElement添加到一个数组中,然后将delete命令放入一个循环中,该循环的运行次数与数组的长度相同 我成功地创建了所需的循环,如下所示(未结订单始终位于顶部,循环在遇到非未结订单时允许中断:Arrays WebdriverIO中的表行计数,arrays,node.js,webdriver-io,Arrays,Node.js,Webdriver Io,我正在测试一个带有动态webtable的webshop,它可以包含0到100行(订单)。为此,我不得不使用NodeJS和webdrivero,这对我来说都是全新的 我想删除每个具有“打开”状态的订单。我习惯于使用Java,在Java中,我只需将所有适用的WebElement添加到一个数组中,然后将delete命令放入一个循环中,该循环的运行次数与数组的长度相同 我成功地创建了所需的循环,如下所示(未结订单始终位于顶部,循环在遇到非未结订单时允许中断: for (var i = 1; i <
for (var i = 1; i < 5; i++) {
var orderStatus = browser.getText("//*[@class='jum-order-list-table-b2c']//tr[1]//*[@class='jum-status']/div[2]/span")
console.log(orderStatus)
if (orderStatus != 'Open') { break; }
browser.pause(1000)
browser.click("//*[@class='jum-order-list-table-b2c']//tr[1]//*[@class='jum-list-actions']/div/a")
browser.pause(1000)
browser.click("//*[@value='Bestelling annuleren']")
browser.pause(1000)
browser.click("//*[@class='ui-dialog-buttonset']//button[2]")
browser.pause(1000)
但这只会在元素超过1个时创建一个数组。我还希望在没有或只有1个webelements时创建一个数组
谁能告诉我怎样才能做到这一点
我正在使用的站点部分如下所示:
<tbody>
<tr class="jum-open-order-row">
<td class="jum-order-type jum-ga-b2b-bestellingen-orderdata">
<td class="jum-cell-bold">
<td class="jum-order-number">
<td class="jum-status">
<td class="jum-price">
<td class="jum-list-actions">
</tr>
<tr class="jum-open-order-row">
<tr class="jum-open-order-row">
<tr class="jum-open-order-row">
</tbody>
与XPath相比,我对CSS选择器有更多的经验,但是有
browser.elements
方法。该方法返回1个或多个与特定选择器匹配的元素
您可以将browser.elements
简化为browser.$$
,如果您愿意的话
然后使用elementIdText
提取“未结”订单的元素文本值
返回的响应是一个结果数组,对应于订单行及其状态
现在我们有了一个“未结订单状态”数组,让我们获得这些状态的文本值
//Let's forEach every returned JSON WebElement and get the Text of the Status...
openOrderRowStatuses.forEach((elem, index)) => {
//Get the Text Value with `elementIdText' elem.value.ELEMENT
let orderStatus = browser.elementIdText(elem.value.ELEMENT)
if(orderStatus === "Open"){
//Perform Delete Logic
}
}
我相信您可能需要修改您的确切设置和选择器,但这是一种成功使用元素数组的方法。我使用ES6语法,因此您可能需要调整您的解决方案。但是“Index”值通过forEach循环传递,因此您可以引用正在使用的行
希望这有帮助!我对CSS选择器的使用经验比XPath丰富,但是,有
browser.elements
方法。它返回1个或多个与特定选择器匹配的元素
您可以将browser.elements
简化为browser.$$
,如果您愿意的话
然后使用elementIdText
提取“未结”订单的元素文本值
返回的响应是一个结果数组,对应于订单行及其状态
现在我们有了一个“未结订单状态”数组,让我们获得这些状态的文本值
//Let's forEach every returned JSON WebElement and get the Text of the Status...
openOrderRowStatuses.forEach((elem, index)) => {
//Get the Text Value with `elementIdText' elem.value.ELEMENT
let orderStatus = browser.elementIdText(elem.value.ELEMENT)
if(orderStatus === "Open"){
//Perform Delete Logic
}
}
我相信您可能需要修改您的确切设置和选择器,但这是一种成功使用元素数组的方法。我使用ES6语法,因此您可能需要调整您的解决方案。但是“Index”值通过forEach循环传递,因此您可以引用正在使用的行
希望这有帮助
//Let's forEach every returned JSON WebElement and get the Text of the Status...
openOrderRowStatuses.forEach((elem, index)) => {
//Get the Text Value with `elementIdText' elem.value.ELEMENT
let orderStatus = browser.elementIdText(elem.value.ELEMENT)
if(orderStatus === "Open"){
//Perform Delete Logic
}
}