Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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和Selenium动态映射元素_Java_Selenium_Selenium Webdriver_Testng - Fatal编程技术网

如何使用Java和Selenium动态映射元素

如何使用Java和Selenium动态映射元素,java,selenium,selenium-webdriver,testng,Java,Selenium,Selenium Webdriver,Testng,问题如下: 我在页面中有一个项目列表,除了一个数字外,其他项目都具有相同的标识符,并且我分别映射它们,例如: @FindBy(id = "element(1)") public WebElement field1 @FindBy(id = "element(2)") public WebElement field2 @FindBy(id = "element(3)") public WebElement field3 @FindBy(id = "element(4)") public WebEl

问题如下:

我在页面中有一个项目列表,除了一个数字外,其他项目都具有相同的标识符,并且我分别映射它们,例如:

@FindBy(id = "element(1)")
public WebElement field1
@FindBy(id = "element(2)")
public WebElement field2
@FindBy(id = "element(3)")
public WebElement field3
@FindBy(id = "element(4)")
public WebElement field4
然后我编写方法来获取每个元素的值

public void getElement1Text(){field1.Text..}
...
理想情况下,我想做的事情如下:

@FindBy(id = "element(VARIABLE)")
public WebElement field
public List getElementText(WebDriver driver){
    List elementTextList = new ArrayList();
    //this loops 1-3
    for(int i = 1; i < 4; i++) {
        //add each text by finding the element, notice elemenIdGoesHere should be changed
        elementTextList.add(driver.findElement(By.id("elementIdGoesHere" + i)).getText());
    }
    //return the list of texts
    return elementTextList;
}
然后循环输入字段的数量,例如:

public void getElementText(){
   for(int i = 1; i < 4; i++){field[i].Text...}
}
public void getElementText(){
对于(inti=1;i<4;i++){field[i].Text…}
}

我知道如何在Ruby而不是Java中实现这一点,有什么提示吗?

我想您描述的是这样一种方法:

@FindBy(id = "element(VARIABLE)")
public WebElement field
public List getElementText(WebDriver driver){
    List elementTextList = new ArrayList();
    //this loops 1-3
    for(int i = 1; i < 4; i++) {
        //add each text by finding the element, notice elemenIdGoesHere should be changed
        elementTextList.add(driver.findElement(By.id("elementIdGoesHere" + i)).getText());
    }
    //return the list of texts
    return elementTextList;
}
公共列表getElementText(WebDriver驱动程序){ List elementTextList=新的ArrayList(); //这个循环1-3 对于(int i=1;i<4;i++){ //通过查找元素添加每个文本,注意ElemenidGoesher应该更改 添加(driver.findElement(By.id(“elementidgoesere”+i)).getText(); } //返回文本列表 返回元素textlist; }
首先创建类似元素的列表

@FindBy(xpath = "//*[contains(@id,'(element(')]")
public List<WebElement> fields;


Then read the each values in the similar elements one by one

public void getElementText(){
      for (WebElement objElement : fields) {
        System.out.println(objElement.getText());
    }
}
@FindBy(xpath=“/*[包含(@id'(元素(')])”)
公共列表字段;
然后逐个读取相似元素中的每个值
public void getElementText(){
for(WebElement对象:字段){
System.out.println(objElement.getText());
}
}

Nice!!这对我很有效,就像上面的解决方案一样…谢谢大家!!