Mongoose найти субдокумент и обновить массив [duplicate]

WebDriverException: элемент не кликабельен в точке (x, y)

Это типичный org.openqa.selenium.WebDriverException , который продолжается java.lang.RuntimeException.

Поля этого исключения:


О вашей индивидуальной usecase ошибка сообщает все:

WebDriverException: Element is not clickable at point (x, y). Other element would receive the click 

Из вашего кодового блока видно, что вы wait определены как WebDriverWait wait = new WebDriverWait(driver, 10);, но вы вызываете метод click() для элемента до того, как ExplicitWait вступает в игру, как в until(ExpectedConditions.elementToBeClickable).

Решение

Ошибка Element is not clickable at point (x, y) может возникать из-за разных факторов. Вы можете обратиться к ним с помощью одной из следующих процедур:

1. Элемент не получает клика из-за присутствия JavaScript или вызовов AJAX

Попробуйте использовать Actions Класс:

WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();

2. Элемент не получает щелчок, поскольку он не находится в пределах Viewport

Попробуйте использовать JavascriptExecutor, чтобы привести элемент в Viewport:

WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement); 

3. Страница становится обновленной до того, как элемент становится доступным.

В этом случае вызывают ExplicitWait i.e WebDriverWait, как указано в пункте 4.

4. Элемент присутствует в DOM, но не доступен для клика.

В этом случае вызывать ExplicitWait с ExpectedConditions, установленным на elementToBeClickable, для элемента, который можно щелкнуть:

WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));

5. Элемент присутствует, но имеет временное наложение.

В этом случае вызывать ExplicitWait с ExpectedConditions, установленным на invisibilityOfElementLocated, чтобы наложение было невидимым.

WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));

6. Элемент присутствует, но имеет постоянный Overlay.

Используйте JavascriptExecutor, чтобы отправить клик непосредственно на элемент.

WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);
1
задан arthurr 24 April 2016 в 13:58
поделиться

2 ответа

Попробуйте это

User.update({_id:ObjectId(userId),'projects.name': data.project},{$push:{'projects.$.tasks':{yourTaskObject}}})

$ в обновлении работает как оператор позиционирования, который извлекает положение родительского массива

3
ответ дан kryshna 26 August 2018 в 17:11
поделиться

Я нашел решение

User.update(
  { _id: Mongoose.Types.ObjectId(userId), 'projects.name': data.project },
  { $push: { 'projects.$.tasks': data.task } },
  (err, data) => {
    if (err) { throw err; }

    return reply('success');
  }
);
1
ответ дан arthurr 26 August 2018 в 17:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: