我正在尝试编写一个函数(使用WebdriverJS lib),该函数遍历元素列表,检查名称并构建与该名称相对应的xpath定位器。我在这里简化了xpath定位器,所以不用注意。
我在这里面临的问题是:1)调用此函数返回未定义。据我了解,这是因为return语句不在其位置,而是:2)将其放置在同步代码通常可以正常工作的正确位置,不适用于异步承诺,因此调用此函数将返回相同的未定义,但是因为return语句在“ driver.findElement”语句之前触发。
如果由于调用此函数而要获取createdTask变量,应如何在此处使用return语句?
var findCreatedTask = function() { var createdTask; driver.findElements(By.xpath("//div[@id='Tasks_Tab']")).then(function(tasks) { for (var index = 1; index <= tasks.length; index++) { driver.findElement(By.xpath("//div[@id='Tasks_Tab'][" + index + "]//div[@class='task-title']")).getText().then(function(taskTitle) { if (taskTitle == "testName") { createdTask = "//div[@id='Tasks_Tab'][" + index + "]"; return createdTask; } }); } }); };
您可以先获取所有文本,promise.map然后再获取位置indexOf:
promise.map
indexOf
var map = webdriver.promise.map; var findCreatedTask = function() { var elems = driver.findElements(By.xpath("//div[@id='Tasks_Tab']//div[@class='task-title']")); return map(elems, elem => elem.getText()).then(titles => { var position = titles.indexOf("testName") + 1; return "//div[@id='Tasks_Tab'][" + position + "]"; }); }