Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在页面对象模型上传递变量值_Java_Selenium_Selenium Webdriver_Pageobjects_Page Factory - Fatal编程技术网

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值的变量时,我们怎么能在脚本顶部提到它呢。