我是 Selenium 的新手。我正在尝试在 MacDonald 的登录和订单的 selenium 中制作脚本。但是登录后我无法单击“继续”和任何其他选项,请帮助我。
我的代码是:--
WebDriver selenium= new FirefoxDriver();
selenium.manage().window().maximize();
String baseurl = "http://www.mcdelivery.co.in/";
selenium.get(baseurl);
Thread.sleep(2000);
Thread.sleep(5000);
WebElement loginbtn = selenium.findElement(By.id("lnkBtnLogin"));
if(loginbtn.isDisplayed()) {
loginbtn.click();
}
WebElement username = selenium.findElement(By.id("txtMobileNumber"));
if(username.isDisplayed()) {
username.clear();
username.sendKeys("******");
}
WebElement pwd = selenium.findElement(By.id("txtMsgPwd"));
if(pwd.isDisplayed()) {
pwd.sendKeys("******");
}
WebElement submit = selenium.findElement(By.id("btnSubmit"));
if(submit.isDisplayed()) {
submit.click();
//Alert aler = selenium.switchTo().alert().accept();
selenium.switchTo().activeElement();
}
WebElement conti = selenium.findElement(By.id("btnContinue"));
if(conti.isDisplayed()) {
conti.click();
}
// selenium.close();
运行后报错
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element:
{"method":"id","selector":"btnContinue"}
Command duration or timeout: 31 milliseconds
最佳答案
由于 Continue 按钮是弹出窗口的一部分(加载需要时间),您需要给 webdriver 一些时间来检测它。为此,请使用 Implicit/Explicit waits 超时.
对于上面的内容,您可以像这样在顶部使用隐式超时;
selenium.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
每次尝试定位元素时,上面的代码都给了 webdriver 15 秒时间。
此外,在这段代码中,
if(conti.isDisplayed())
{
conti.click();
}
由于某些奇怪的原因,在 if ( conti.isDisplayed() ) 中时,Continue 按钮没有被点击。所以,失去那个循环。只需使用 conti.click();。尝试时它起作用了!
关于java - 无法处理 Selenium WebDriver 中的 Ajax 弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26848390/