Java 如何在页面对象模型上传递变量值
我正在使用页面对象模型创建项目 要定义简单元素,最简单的方法是定义Java 如何在页面对象模型上传递变量值,java,selenium,selenium-webdriver,pageobjects,page-factory,Java,Selenium,Selenium Webdriver,Pageobjects,Page Factory,我正在使用页面对象模型创建项目 要定义简单元素,最简单的方法是定义 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
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”是变量
我们如何定义它 在这种情况下,不能创建变量。您必须在方法中传递xpath,在该方法中,您将变量作为参数传递
public void clickElement(String accountID){
driver.findElement(By.xpath("//input[@id='" + accountID + "']")).click();
}
根据您的问题和下面提供的示例代码,让我们假设调用元素elemA上的click()
,使另一个元素可点击,您需要结合以下内容进行归纳:
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();
}
}
根据Simon在讨论中的说法:
ExpectedConditions支持的大多数内容都使用WebElement或定位器。如果你发现一个没有,那么你需要做的就是找出正确的定位器来使用。除非您使用了@FindBy注释,否则这是By.name或By.id。如果您使用过注释,那么生活就很简单了——它就在代码中。或者,不要使用PageFactory初始化该字段,只需自己查找即可
记住,PageFactory只是为了帮你保存一些样板文件。在不适合您的特定用例的地方,您总是可以不使用它
结论
因为ExpectedConditions支持的大多数东西要么使用WebElement,要么使用定位器。如果您无法找到动态元素作为替代,请不要使用PageFactory初始化该字段,只需自己查找即可。我不太确定,为什么您要使用2个选择器By.xpath()和By.xpath(),这两个元素是还是?这只是一个示例听起来像是一个。编辑您的问题并询问实际问题,而不是寻求帮助解决问题。你想干什么?我想你误解了我的意思。我需要的是,在脚本的每个顶部,如果可能的话,可以用POM结构定义WebElement路径,就像我提到的第一个示例一样。但当我们有依赖于Xpath或webelement值的变量时,我们怎么能在脚本顶部提到它呢。