2017-02-04 8 views
0

Когда я пытался работать под кодом, visibilityOfElementLocated работает отлично, а webdriver ждет элемент с заданным временем.visibilityOfElementLocated Vs visibilityOf

dr.get("http://www.seleniumframework.com/Practiceform/"); 
WebDriverWait wait=new WebDriverWait(dr,30); 
WebElement we = wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Element5"))); 

, но точно так же, если я использую visibilityOf, это дает мне

NoSuchElementException

WebElement we = wait.until(ExpectedConditions.visibilityOf(dr.findElement(By.linkText("Element3")))); 

Можете ли вы объяснить мне, почему я получаю это исключение?

ответ

4

, но точно так же, если я использую «visibilityOf», это дает мне NoSuchElementException

На самом деле, вы получаете Exception этой строки кода dr.findElement(By.linkText("Element3")), в вашем условии кода эта строка будет выполняться сначала, и если элемент будет найден, то будет выполняться ExpectedConditions.visibilityOf() вызываемый.

FYI, WebDriver.findElement() либо выбрасывает исключение, либо возвращает WebElement.

visibilityOfElementLocated Vs visibilityOf: -

  • visibilityOfElementLocated используется для проверки того, что элемент присутствует на DOM в виде страницы и видимой. Значит он использует объект By вместо WebElement объект с вызываемой функцией, чтобы сначала найти этот элемент, а затем проверить, что элемент виден или нет.

  • visibilityOf используется для проверки того, что элемент, известно, присутствует на DOM страницы, видна. Значит, вы уже нашли этот элемент и просто проверяете только эту видимость.

6

По this:

visibilityOf: Не проверяет наличие из элемента как ошибка объясняет.

visibilityOfElementLocated: проверяет, является ли данный элемент присутствует , а также видны. Чтобы проверить видимость, он гарантирует, что элемент имеет высоту и ширину больше 0.