Selenium 是一个;可点击“;硒中的元素也意味着它是;可见的和当前的;?

Selenium 是一个;可点击“;硒中的元素也意味着它是;可见的和当前的;?,selenium,selenium-webdriver,webdriver,Selenium,Selenium Webdriver,Webdriver,在Selenium框架中,ExpectedConditions.elementIsClickable是否意味着该元素也“可见、启用和存在”。ExpectedConditions.presenceOfElementLocatedBy本身似乎只是一个简单的findElement调用 通过查看源代码,以下是我迄今为止从方法中获得的有关ExpectedConditions行为的信息: 1. findElement() = can throw NoSuchElementException, or Web

在Selenium框架中,ExpectedConditions.elementIsClickable是否意味着该元素也“可见、启用和存在”。ExpectedConditions.presenceOfElementLocatedBy本身似乎只是一个简单的findElement调用

通过查看源代码,以下是我迄今为止从方法中获得的有关ExpectedConditions行为的信息:

1.  findElement() = can throw NoSuchElementException, or WebDriverException
2.  elementToBeClickable() = is visible, !null, and enabled, catches
      a StaleElementReferenceException
3.  visbilityOf()  =   displayed, catches no exception
4.  presenceOfElementLocated()  =   simple findElement call,  catches findElement() 
      exceptions
5.  stalenessOf() =  true if findElement succeeds, can catch StaleElementReferenceException,
      or findElement() exceptions
6.  visibilityOfElementLocated() = same as stalenessOf, can catch 
      StaleElementReferenceException or the findElement() exceptions

是的,可单击元素要求元素可见
Click()
将失败,如果元素被隐藏,将抛出
ElementNotVisibleException

示例:对于下面隐藏的
span
单击()
将抛出
ElementNotVisibleException
,消息为
元素当前不可见,因此可能无法与
交互

var driver = new FirefoxDriver();
driver.Navigate().GoToUrl("data:text/html,<span id=\"hello\" style=\"display:none;\">Hello</span>");
driver.FindElement(By.Id("hello")).Click();
var-driver=新的FirefoxDriver();
driver.Navigate().gotour(“数据:text/html,Hello”);
driver.FindElement(By.Id(“hello”))。单击();

可点击表示元素可见并已启用。将显示并启用另一个单词元素。

如果有任何疑问,您可以随时检查实施情况。

谢谢!非常感谢。非常感谢。你刚才给了我一种方法,可以在不需要外部网站的情况下为我的方法编写单元测试!我非常感谢你!现在我可以自己编写单元测试来证明这些。非常高兴。:)虽然,我不认为clickable意味着enabled,因为也可以单击禁用的元素-它不会做任何事情。我实际上在WebDriver规范中找到了关于这些元素如何工作的更详细解释。因此,通过检查源代码和规范,我至少对正在发生的事情有了一个模糊的概念。是的,规范清楚地定义了
单击
方法,要求
必须显示元素
。单击方法(14.3.1.1)的实现与
select
元素不同,可能需要滚动查看元素。