Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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
Javascript 为什么这两个元素定位器调用的行为不同?_Javascript_Selenium Webdriver - Fatal编程技术网

Javascript 为什么这两个元素定位器调用的行为不同?

Javascript 为什么这两个元素定位器调用的行为不同?,javascript,selenium-webdriver,Javascript,Selenium Webdriver,我正在使用JavaScript编写webdriver自动化来测试web应用程序。我有如下代码: var selenium = require('selenium-webdriver'); By = selenium.By; until = selenium.until; driver = new selenium.Builder(). withCapabilities(selenium.Capabilities.chrome()). build(); getItems = async

我正在使用JavaScript编写webdriver自动化来测试web应用程序。我有如下代码:

var selenium = require('selenium-webdriver');
By = selenium.By;
until = selenium.until;

driver = new selenium.Builder().
  withCapabilities(selenium.Capabilities.chrome()).
  build();

getItems = async function() {
  try {
    var itemsXpath = '[xpath expression]';
    var items = await driver.findElements(By.xpath(itemsXpath));
    console.log(items.length + ' items found');
    ...
  }
  catch(err) {
    console.log(err);
  }
}
这是成功的。但是,如果我将
wait
行替换为:

var items = await driver.wait(until.elementsLocated(By.xpath(itemsXpath)),60000);
它没有按预期执行。既不显示以下
console.log()
,也不显示
catch()
块中的

从阅读中,我的印象是,如果页面上有与XPath定位器匹配的项,那么这两个函数中的任何一个都可以工作,并返回元素。但是,如果元素不在页面上,第二个公式将等待它们出现(在本例中,最长可达60000ms)

请注意,第二种编写方法不起作用,即使在调用
getItems()
时屏幕上已经有这些项目。此外,程序完成的时间比
driver.wait()
中指定的超时时间要短


我是否误解了它的工作原理,以至于这种行为实际上是有意义的?如果是这样的话,有人能澄清一下这是怎么回事吗?

你写的那句话:

var items = await driver.findElements(By.xpath(itemsXpath));
如果给定的xpath与任何元素匹配,将检查元素并返回
Array

但是您使用的等待方法:

var items = await driver.wait(until.elementsLocated(By.xpath(itemsXpath)),60000);
不会返回任何元素。它只是等待元素位于DOM中

无论如何,您已经指定了60秒来使用
elementLocated
方法查找元素。此行将最多等待60秒,以查找与xpath匹配的元素。如果指定的xpath在不到60秒的时间内与任何元素匹配,它将在该特定时间结束等待并移动到下一行。请注意,在这种情况下不会有任何错误。因此,不可能抓住拦网


有关这方面的更多详细信息,请参阅。

在“”页的this.wait()部分中,他们特别指出此构造将返回元素。他们甚至给出了一个与我在这里所做的非常类似的例子。他们所写的语句返回“如果输入条件是WebElementCondition的实例,则返回的值将是WebElementPromise。”是不正确的。您可以检查java WebDriverWait类及其方法它到底做了什么。这个类和这个类中的方法不会返回任何元素这个行为,其中driver.wait()可以返回元素,是我在测试代码中依赖的一个元素,所以我知道这个部分可以按照我的预期工作。我从未使用过webdriver的Java版本,因此该版本的工作方式可能与我所描述的不同。