Я пытаюсь щелкнуть по динамически загруженному элементу из веб-приложения React.js. Элемент открывает модальное окно с именем класса newItemView
. Я пробовал немало вещей, но ничего надежного. Он будет работать несколько раз, но затем дайте мне ошибку.Ненадежный элемент click Selenium WebdriverJS
Целью является щелчок по динамическому элементу, а затем нажмите кнопку в модальном окне.
Попытка 1:
driver.wait(until.elementLocated(By.xpath(PATH_TO_DYNAMIC_ELEMENT)), MAX_WAIT_TIME,
'Could not locate the element within the time specified')
.then(function() {
driver.findElement(By.xpath(PATH_TO_DYNAMIC_ELEMENT)).click();
});
driver.wait(until.elementLocated(By.xpath(PATH_TO_MODAL_BUTTON)), MAX_WAIT_TIME,
'Could not locate the modal element within the time specified')
.then(function() {
driver.findElement(By.xpath(PATH_TO_MODAL_BUTTON)).click();
});
Примерно раз из 5 Trys, это бросает 'Could not locate the modal element within the time specified'
, потому что модальный фактически не открыт.
Покушение 2 ждет, а затем использует Actions
подвинуться кнопку и нажмите:
driver.wait(until.elementLocated(By.xpath(PATH_TO_DYNAMIC_ELEMENT)), MAX_WAIT_TIME,
'Could not locate the dynamic element within the time specified')
.then(function() {
driver.findElement(By.xpath(PATH_TO_DYNAMIC_ELEMENT))
.then(function(PATH_TO_DYNAMIC_ELEMENT_BUTTON) {
var actions = new webdriver.ActionSequence(driver);
actions.mouseMove(PATH_TO_DYNAMIC_ELEMENT_BUTTON).click().perform();
});
});
Затем выполняет проверку, чтобы увидеть, если модальный открыт
driver.findElement(webdriver.By.className("newItemView"))
.then(function() {
driver.findElement(By.xpath(PATH_TO_MODAL_BUTTON)).click();
}, function (err) {
if (err.name === "NoSuchElementError")
console.log("Element was missing!");
});
Это, кажется, работает лучше, но все равно бросает около 1 раза в 10 раз. На веб-странице Actions
, похоже, работает, потому что элемент отображается на hover
, но его не нажимали.
Также элемент elementLocated должен возвращать элемент, который устраняет вызов findElement в середине. – Jason