пытаются использовать альтернативный CSS selector подход, потому что:
- CSS селекторы выполняют гораздо лучше, чем Xpath и хорошо документированы в Selenium сообщества
- Двигатели Xpath различны в каждом браузере, поэтому делают их непоследовательным
- IE не имеет родной xpath, поэтому селен вводит свой собственный движок xpath для совместимости его API. Следовательно, мы теряем преимущество , используя собственные функции браузера, которые WebDriver по своей сути поддерживает .
- Xpath, как правило, становится сложными и, следовательно, сделать трудно читать в моем мнения Однако есть ситуации, в которых вы должны использовать XPath, например, поиск родительского элемента или поиск элемента его текст (I Wouldn Рекомендуем позже).
Подробнее о сравнении производительности вы можете получить here
После того, как вы начнете делать какие-либо действия на webElements также лучше подождать, пока вся страница не оказывает. Вот некоторые приемы, которые помогут вам: 1) waitForPageLoad()
метод:
public void waitForPageLoad(WebDriver driver_) {
Wait<WebDriver> wait = new WebDriverWait(driver_, 30);
wait.until(new Function<WebDriver, Boolean>() {
public Boolean apply(WebDriver driver) {
return String
.valueOf(((JavascriptExecutor) driver).executeScript("return document.readyState"))
.equals("complete");
}
});
}
2) fluentWait метод -An реализация интерфейса Wait, который может иметь свой тайм-аут и интервал опроса настроены на лету.
public WebElement fluentWait(WebDriver driver, final By locator) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
// .pollingEvery(5, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS)
// .ignoring(NoSuchElementException.class);
.ignoring(org.openqa.selenium.NoSuchElementException.class);
WebElement foo = wait.until(
new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
}
);
return foo;
}
после добавления этих методов вы можете использовать следующие вызовы:
// css selector of the input field:
String cssSelectorInput="blablabla"
waitForPageLoad(driver);
WebElement input= fluentWait(driver, By.cssSelector(cssSelectorInput));
input.sendKeys("test name");
..... etc
Надеется, что это помогает.
Какой код вы пытались? Попробуйте указать какое-то явное ожидание, например 'ExpectedConditions.visibilityOfElementLocated (локатор)' ... спасибо ... –
Я тоже это пробовал .. Ожидание 30 секунд. новый WebDriverWait (драйвер, 30) .until (ExpectedConditions.elementToBeClickable (By.xpath (OR.getProperty (объект)))); – user1700354
может предоставить html в IE, пожалуйста ... –