Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Selenium Webdriver findElement承诺无法解决_Node.js_Selenium Webdriver_Selenium Chromedriver - Fatal编程技术网

Node.js Selenium Webdriver findElement承诺无法解决

Node.js Selenium Webdriver findElement承诺无法解决,node.js,selenium-webdriver,selenium-chromedriver,Node.js,Selenium Webdriver,Selenium Chromedriver,我将SeleniumWebDriver与NodeJS和Chromedriver一起使用。我正在运行一个基本测试:打开一个网页并找到3个元素。最奇怪的事情发生在图像元素上。(我必须单击它,但它总是抛出错误)。当我运行以下代码时: driver.wait(until.elementLocated(By.css('img.arrow-icon')), 5000); driver.findElement(By.css('img.arrow-icon')).then(function(el){ c

我将SeleniumWebDriver与NodeJS和Chromedriver一起使用。我正在运行一个基本测试:打开一个网页并找到3个元素。最奇怪的事情发生在图像元素上。(我必须单击它,但它总是抛出错误)。当我运行以下代码时:

driver.wait(until.elementLocated(By.css('img.arrow-icon')), 5000);
driver.findElement(By.css('img.arrow-icon')).then(function(el){
    console.log("!!!!!!!!!!! " + el.getTagName());
})
我得到以下结果:

!!!!!!!!!!! ManagedPromise::221 {[[PromiseStatus]]: "pending"}
有可能在里面有一个未解决的承诺吗。然后()

我最初的代码是:

driver.wait(until.elementLocated(By.css('img.arrow-icon')), 5000).click();
这总是引发以下错误:

ElementNotVisibleError: element not visible
  (Session info: chrome=61.0.3163.100)
  (Driver info: chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 10.0.15063 x86_64)
我必须说,webdriver发现页面中还有另外两个元素没有问题。不知怎的,这张照片有点问题。。我不知道。。请帮忙

编辑: 我试过使用

driver.sleep(5000);

…但还是没有成功。我收到“元素不可见”的错误,但图像存在;我可以从一开始就看到它

我通过查找by.xpath元素来解决这个问题(不过我必须提到,CSS选择器很好;它使用jQuery工作),我不知道为什么会发生这种情况

我通过查找by.xpath元素来解决这个问题(不过我必须提到,CSS选择器很好;它使用jQuery工作),我不知道为什么会发生这种情况

如果返回driver.findElement()函数会发生什么情况。您需要这样做,以便它将用于el变量。试试这个,它会有用的

driver.wait(直到.elementLocated(By.css('img.arrow icon')),5000);
返回driver.findElement(By.css('img.arrow icon'))。然后返回(function(el){
console.log(“!!!!!!!!!”+el.getTagName());

})
如果返回driver.findElement()函数会发生什么情况。您需要这样做,以便它将用于el变量。试试这个,它会有用的

driver.wait(直到.elementLocated(By.css('img.arrow icon')),5000);
返回driver.findElement(By.css('img.arrow icon'))。然后返回(function(el){
console.log(“!!!!!!!!!”+el.getTagName());

})
您确定您的定位器正确吗?您确定定位器在页面上找不到多个元素,并且第一个元素不可见,而不是您想要的元素吗?此外,如果您计划在找到该元素后单击该元素,请不要等待找到该元素,而是等待该元素可单击。这样,一旦找到它,您就可以立即单击它。元素的位置只是表示它位于DOM中,而不是表示它是可见的或可单击的。确保您的等待与您的操作相匹配(如果可能)。这将使你的测试更加可靠。谢谢你的提示JeffC,我正在验证你说的话你确定你的定位器是正确的吗?您确定定位器在页面上找不到多个元素,并且第一个元素不可见,而不是您想要的元素吗?此外,如果您计划在找到该元素后单击该元素,请不要等待找到该元素,而是等待该元素可单击。这样,一旦找到它,您就可以立即单击它。元素的位置只是表示它位于DOM中,而不是表示它是可见的或可单击的。确保您的等待与您的操作相匹配(如果可能)。这会让你的测试更可靠。谢谢你的提示JeffC,我正在验证你所说的