使用组合的xpath定位元素并单击它

时间:2017-11-24 08:53:09

标签: node.js selenium xpath webdriver-io

我正在尝试使用XPATH检索元素列表,并且从此列表中我想基于类名检索子元素并单击它。

DOM

2 个答案:

答案 0 :(得分:0)

我不知道node.js,但在Java中你应该通过以下方式实现目标:

titleList[i].findElementBy(By.className("classToFind"))

假设titleList [i]是列表上的元素,您想从

获取子元素

答案 1 :(得分:0)

我有一个类似的实现可能是你想要做的,但是由于使用CSS选择器而不是XPath,我的实现可能更复杂。我确信这不是优化的,而且最有可能得到改进。

这使用来自WebdriverIO的方法elementIdText()elementIdClick()来处理Web JSON元素的“文本值”,然后在匹配您要查找的内容后单击所需的元素。

http://webdriver.io/api/protocol/elementIdText.html http://webdriver.io/api/protocol/elementIdClick.html

第1步 - 找到您想要使用的所有潜在元素:

// Elements Query to return Elements matching Selector (titles) as JSON Web Elements. 
// Also `browser.elements('<selector>')`
titles = browser.$$('<XPath or CSS selector>') 

第2步 - 循环使用Elements剥离InnerHTML或文本值并将其推送到单独的数组中:

// Create an Array of Titles
var titlesTextArray = [];
titles.forEach(function(elem) {
    // Push all found element's Text values (titles) to the titlesTextArray 
    titlesTextArray.push(browser.elementIdText(elem.value.ELEMENT))
  })

步骤3 - 循环浏览标题文本数组值以查找您要查找的内容。使用elementIdClick()函数单击所需的值:

//Loop through the titleTexts array looking for matching text to the desired title.
for (var i = 0; i < titleTextsArray.length; i++) {
  if (titleTextsArray[i].value === title) {
    // Found a match - Click the corresponding element that  
    // it belongs to that was found above in the Titles
    browser.elementIdClick(titles[i].value.ELEMENT)
  }
}

我把所有这些都包含在一个函数中,我在其中提供了我想要搜索的预期文本(在您的情况下是一个特定的title)。希望这有帮助!