Я играл с селеном в java, и я столкнулся с проблемой, которую я не могу понять.org.openqa.selenium.ElementNotVisibleException нажатие кнопки продолжения
на этой странице здесь: http://www.legalcontracts.com/contracts/lease-agreement-form/?ldcn=menu+name
происходит с третьей страницы (адрес страницы) к четвертому я в состоянии установить адрес:
@FindBy(xpath="//div[@class=' qd spropertyAddress']/div[@class='ans']/input")
private WebElement address;
public void SetAddress(String addressName){
address.sendKeys(addressName);
}
, но когда я пытаюсь продолжить
@FindBy(xpath="//a[contains(text(),'Continue')]")
private WebElement continuebutton;
continuebutton.click();
Я получаю org.openqa.selenium.ElementNotVisibleException
. Кнопка продолжения - это тот же идентификатор @FindBy
, что и предыдущая страница, поэтому я не уверен, что это связано с этим. Я пробовал много разных способов, чтобы попытаться справиться с этим, но единственный способ, который, кажется, работает, - это thread.sleep
, который не является отличным способом справиться с этим.
вещи, которые я пробовал:
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.elementToBeClickable(continuebutton));
wait.until(ExpectedConditions.elementToBeClickable(continuebutton));
wait.until(ExpectedConditions.presenceOfElementLocated((By) continuebutton));
wait.until(ExpectedConditions.visibilityOfElementLocated((By) continuebutton));
public void waitForJQuery(WebDriver driver) {
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
JavascriptExecutor js = (JavascriptExecutor) d;
return (Boolean) js.executeScript("return !!window.jQuery && window.jQuery.active == 0");
}
});
}
public void waitForJavaScript(WebDriver driver){
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete");
}
}
);
public void checkPageIsReady(WebDriver driver) { JavascriptExecutor js = (JavascriptExecutor)driver; //Initially bellow given if condition will check ready state of page.
if (js.executeScript("return document.readyState").toString().equals("complete")){
System.out.println("Page Is loaded.");
return;
}
//This loop will rotate for 25 times to check If page Is ready after every 1 second.
//You can replace your value with 25 If you wants to Increase or decrease wait time.
for (int i=0; i<25; i++){
try {
Thread.sleep(1000); }
catch (InterruptedException e) {}
//To check page ready state.
if (js.executeScript("return document.readyState").toString().equals("complete")){
break; } }
}
Я пришел в с предыдущей страницы с тем же продолжать, но в другой странице объекта:
@FindBy(xpath="//a[contains(text(),'Continue')]")
private WebElement continuebutton;
continuebutton.click();
Может селеном быть запутанным ток кнопку продолжить предыдущий?
@eradicator, это сработало ??? – noor
Я пытаюсь не использовать thread.sleeps в моем коде. Если я использую сон, все работает нормально, но это не гарантия того, что щелчок будет работать. – eradicator
Я просто использую это для целей тестирования ..... не нужно использовать это ожидание ..... u можете нажать кнопку продолжения без это ожидание .... я сказал, что не могу нажимать на кнопку продолжения ... просто используйте мой css-путь для этого щелчка – noor