我thread.sleep()在下面的代码中添加了硬代码等待。如何使用显式等待。我想等到“用户名” WebElement出现。我的程序运行正常。我已经写了测试用例。
thread.sleep()
package com.pol.zoho.PageObjects; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.ui.WebDriverWait; public class ZohoLoginPage { WebDriver driver; public ZohoLoginPage(WebDriver driver) { PageFactory.initElements(driver, this); } @FindBy(xpath=".//*[@id='lid']") public WebElement email; @FindBy(xpath=".//*[@id='pwd']") public WebElement password; @FindBy(xpath="//*[@id='signin_submit']") public WebElement signin; public void doLogin(String username,String userpassword) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } email.sendKeys(username); password.sendKeys(userpassword); signin.click(); }
}
在 PageObjectModel中* 使用 PageFactory时 ,如果您希望该元素通过某些JavaScript加载并且可能已经不存在于页面中,则可以对普通的定位器工厂使用 Explicit Wait 支持,如下所示: * __
package com.pol.zoho.PageObjects; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class ZohoLoginPage { WebDriver driver; public ZohoLoginPage(WebDriver driver) { PageFactory.initElements(driver, this); } @FindBy(xpath=".//*[@id='lid']") public WebElement email; @FindBy(xpath=".//*[@id='pwd']") public WebElement password; @FindBy(xpath="//*[@id='signin_submit']") public WebElement signin; public void doLogin(String username,String userpassword) { WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(ZohoLoginPage.getWebElement())); email.sendKeys(username); password.sendKeys(userpassword); signin.click(); } public WebElement getWebElement() { return email; } }
您可以在如何对PageFactory字段和PageObject模式使用显式等待中找到详细的讨论。