Это полное сообщение об ошибке ...
Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with Command duration or timeout: 2.05 seconds
... означает, что требуемый элемент не был виден в HTML DOM , тогда как WebDriver экземпляр пытается найти его.
ElementNotVisibleException
ElementNotVisibleException выбрасывается, чтобы указать, что хотя элемент присутствует в DOM Tree , оно не видно и поэтому не может взаимодействовать с ним.Это исключение runtime и имеет следующую иерархию:
java.lang.RuntimeException
org.openqa.selenium.WebDriverException
org.openqa.selenium.InvalidElementStateException
org.openqa.selenium.ElementNotInteractableException
org.openqa.selenium.ElementNotVisibleException
Сводка полей
Поля этого исключения наследуются от класса org.openqa.селен. WebDriverException и следующие:
Modifier and Type Field and Description
--------------------------------- ---------------------
protected static java.lang.String BASE_SUPPORT_URL
static java.lang.String DRIVER_INFO
static java.lang.String SESSION_ID
Причина
Один возможный отрыв от ElementNotVisibleException заключается в том, что WebElement - это присутствует в HTML, и это исключение обычно встречается при попытке click()
или read
атрибута элемента, который скрыт от просмотра.
Решение
Как ElementNotVisibleException гарантирует, что WebElement будет представлять в HTML, поэтому решение будет в два раза больше, согласноследующие шаги, как описано ниже:
Если следующим шагом является чтение любого атрибута нужного элемента, то вам нужно вызвать WebDriverWait в сочетании с ExpecДля условия tedConditions установлено значение visibilityOfElementLocated следующим образом:
//using id attribute
new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.id("element_id"))).getAttribute("innerHTML");
//using linkText attribute
new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.linkText("element_linkText"))).getAttribute("innerHTML");
//using cssSelector
new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("element_cssSelector"))).getAttribute("innerHTML");
//using xpath
new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("element_xpath"))).getAttribute("innerHTML");
Если следующим шагом будет вызов click()
натребуемый элемент, то вам нужно вызвать WebDriverWait в сочетании с предложением ExpectedConditions , установленным в elementToBeClickable , следующим образом:
//using id attribute
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.id("element_id"))).click();
//using linkText attribute
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.linkText("element_linkText"))).click();
//using cssSelector
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("element_cssSelector"))).click();
//using xpath
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("element_xpath"))).click();
Этот сценарий использования
Требуемый элемент - это Angular элемент, поэтому необходимо активировать WebDriverWait , чтобы элемент был кликабельным , и вы можете использовать одно из следующих решений:
cssSelector
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("span.tix-checkbox input.ng-star-inserted[name='undefined']"))).click();
xpath
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='tix-checkbox']//input[@class='ng-star-inserted' and @name='undefined']"))).click();