Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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
Java &引用;隐式等待“;等待元素可单击、显示或可见_Java_Selenium Webdriver - Fatal编程技术网

Java &引用;隐式等待“;等待元素可单击、显示或可见

Java &引用;隐式等待“;等待元素可单击、显示或可见,java,selenium-webdriver,Java,Selenium Webdriver,在Selenium WebDriver中,存在关于隐式和显式等待之间差异的问题 在SeleniumHq上也有: 隐式等待 隐式等待是告诉WebDriver在尝试查找一个或多个元素时轮询DOM一段时间,如果 目前还无法立即获得。默认设置为0。一旦 设置时,将为WebDriver对象的生命周期设置隐式等待 例如 但不清楚这是什么样的等待,我的意思是它会等到isDisplayed、isVisible或isClickable我相信隐式等待并不关心这些属性中的任何一个(isDisplayed、isVi

Selenium WebDriver
中,存在关于
隐式
显式
等待
之间差异的问题

在SeleniumHq上也有:

隐式等待

隐式等待是告诉WebDriver在尝试查找一个或多个元素时轮询DOM一段时间,如果 目前还无法立即获得。默认设置为0。一旦 设置时,将为WebDriver对象的生命周期设置隐式等待 例如


但不清楚这是什么样的等待,我的意思是它会等到
isDisplayed
isVisible
isClickable
我相信隐式等待并不关心这些属性中的任何一个(isDisplayed、isVisible或isClickable)。它只是等待您设置的时间,并定期检查您尝试选择的元素在DOM中是否可用。如果找不到,它将启动超时错误。

我相信隐式等待不关心这些属性中的任何一个(isDisplayed、isVisible或isClickable)。它只是等待您设置的时间,并定期检查您尝试选择的元素在DOM中是否可用。如果找不到它,它将引发超时错误。

我相信narko是正确的,我认为下面的一些代码可以证明这一点

By hiddenLocator = By.id("csi");
FirefoxDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.google.com");
WebElement hiddenEle = driver.findElement(hiddenLocator);
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.presenceOfElementLocated(hiddenLocator));
System.out.println("done");
我去了google.com,发现了一个隐藏的元素

<textarea name="csi" id="csi" style="display:none"></textarea>

我将隐式等待设置为30秒,将
WebDriverWait
设置为30秒,然后等待元素出现。从

检查页面的DOM上是否存在元素的期望。这并不一定意味着元素是可见的

如果隐式等待等待的不是DOM中元素的存在,它将等待30秒。。。但当页面加载到浏览器中时,它就完成了

我做了一些研究,以更好地了解这些不同的功能在做什么,以及它们是如何真正不同的。这是我发现的

有三个与此问题相关的方法:IsDisplay()、isEnabled()和isSelected()。从文件中

isDisplayed()是否显示此元素?此方法避免了 必须解析元素的“style”属性的问题

isEnabled()元素当前是否已启用?这将 对于除禁用的输入元素之外的所有元素,通常都返回true

isSelected()确定是否选中此元素

这里也有几种方法。我将简要介绍
元素tobelickable()
。从文件中

ElementToBickable检查元素是否可见的期望值 并已启用,以便您可以单击它


如果你看一下,描述是准确的。如果您想了解更多信息,可以查看其他方法的源代码,等等。但我认为这足以回答您的问题。

我相信narko是正确的,下面是一些我认为可以证明这一点的代码

By hiddenLocator = By.id("csi");
FirefoxDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.google.com");
WebElement hiddenEle = driver.findElement(hiddenLocator);
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.presenceOfElementLocated(hiddenLocator));
System.out.println("done");
我去了google.com,发现了一个隐藏的元素

<textarea name="csi" id="csi" style="display:none"></textarea>

我将隐式等待设置为30秒,将
WebDriverWait
设置为30秒,然后等待元素出现。从

检查页面的DOM上是否存在元素的期望。这并不一定意味着元素是可见的

如果隐式等待等待的不是DOM中元素的存在,它将等待30秒。。。但当页面加载到浏览器中时,它就完成了

我做了一些研究,以更好地了解这些不同的功能在做什么,以及它们是如何真正不同的。这是我发现的

有三个与此问题相关的方法:IsDisplay()、isEnabled()和isSelected()。从文件中

isDisplayed()是否显示此元素?此方法避免了 必须解析元素的“style”属性的问题

isEnabled()元素当前是否已启用?这将 对于除禁用的输入元素之外的所有元素,通常都返回true

isSelected()确定是否选中此元素

这里也有几种方法。我将简要介绍
元素tobelickable()
。从文件中

ElementToBickable检查元素是否可见的期望值 并已启用,以便您可以单击它


如果你看一下,描述是准确的。如果您想了解更多信息,可以查看其他方法的来源等。但我认为这足以回答您的问题。

可用是什么意思?您可以看到它,单击它或悬停??可用的意思是您可以在DOM中找到该元素。我指的是守则。在屏幕上不可见的事实并不意味着元素不存在于DOM中。您的意思是使用
.findelelement(By.\uuu u)
。我认为你应该引用一个例子来证明你的答案。我的意思是,如果你搜索一个按钮,定义这个按钮的HTML代码必须存在于你的DOM中。然后,您可以使用
findElement
。网站的注销选项找到它。只有当您将鼠标悬停在配置文件图像上时,才能单击该选项。现在,此注销始终存在于DOM中,但在悬停之前它是隐藏的,悬停之后它是可单击的,即,
findElement
在悬停之前失败。所以我认为只说“可用”是没有帮助的。你说可用是什么意思?您可以看到它,单击它或悬停??可用的意思是您可以在DOM中找到该元素。我指的是守则。在屏幕上不可见的事实并不意味着元素不存在于DOM中。您的意思是使用
.findelelement(By.\uuu u)
。我认为你应该举出一个例子来证明你的答案