我正在使用Page Object Model创建项目,
要定义简单的元素,最简单的定义
By loginEmailParse = By.id("signIn-email");
并称之为:driver.findElement(loginEmailParse);
但是,当我们具有带有变量的条件时,
By.xpath("//input[@id='" + accountID + "']")
和
By.xpath("//input[@id='" + accountID + "']//following::i[@class='far fa-sign-in addPointer']")
“ accountID”在此处是变量
我们如何定义它?
答案 0 :(得分:0)
在这种情况下,您无法创建变量。您必须在将变量作为参数传递的方法中传递xpath。
public void clickElement(String accountID){
driver.findElement(By.xpath("//input[@id='" + accountID + "']")).click();
}
答案 1 :(得分:0)
根据您的问题和下面提供的示例代码,让我们假设在元素{em> elemA 上调用click()
使{{3}中的另一个元素 clickable },您需要为此与DOM Tree进行WebDriverWait共轭:
public class LoginPageNew
{
WebDriver driver;
//constructor
public LoginPageNew(WebDriver loginDriver)
{
this.driver=loginDriver;
}
@FindBy(id="element1")
@CacheLookup
WebElement elemA;
public void login_wordpress(String accountID)
{
elemA.click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='" + accountID + "']//following::i[@class='far fa-sign-in addPointer']"))).click();
}
}
在讨论ExpectedConditions中,根据Simon的说法:
ExpectedConditions支持的大多数东西都使用WebElement或定位器。如果找到一个没有的定位器,那么您需要做的就是找出要使用的正确定位器。除非您使用@FindBy批注,否则它是By.name或By.id。如果您使用了注释,那么生活就很简单---它就在代码中。另外,不要使用PageFactory初始化该字段,而自己进行查找。
请记住,PageFactory就在那里尝试为您节省一些样板。您总是可以在不适合您特定用例的地方使用它。
ExpectedConditions 支持的大多数东西都使用 WebElement 或 locator 。如果您找不到动态元素作为替代方案,请不要使用 PageFactory 初始化该字段,而自己进行查找。