如何从表中获得价值?

时间:2015-09-23 14:59:57

标签: java selenium htmlelements

<table id="usersForm:mainTable:n" class="extdt-table-layout res-table" cellspacing="0" cellpadding="0" border="0" width="100%;" style="">
   <colgroup id="usersForm:mainTable:colgroup:body">
      <tbody id="usersForm:mainTable:tb">
         <tr id="usersForm:mainTable:n:0" class="extdt-firstrow rich-extdt-firstrow extdt-row-selected rich-sdt-row-selected res-table-selected" onmousedown="handleMouseClick(event)">
            <td id="usersForm:mainTable:1:name" class="extdt-cell rich-extdt-cell">
               <div class="extdt-cell-div">
                  <div onmouseup="if (showMenu(this)) {document.lkjasdf = event; selectContextMenu('ENTTUSER','MbUsersSearch');}">
                     <span title="ADMIN" onmouseup="if(!rightButton && isSelectedRow(this,rightButton) && false && !disableContext) {setDisableContext(true); beforePrepareDefaultAction('ENTTUSER','MbUsersSearch');}">ADMIN</span>

使用htmlelements模式,我想从表中获取值,即验证该表包含值&#34; ADMIN&#34;。 在htmlelements中可以使用表格&#34;来自框#34;。我写道:

import ru.yandex.qatools.htmlelements.element.Table;
public class MainTableForm extends HtmlElement {
    @FindBy(id = "usersForm:mainTable:n")
    private Table table;
}

然后我不知道哪种方法有助于获得价值。

3 个答案:

答案 0 :(得分:1)

您可以使用List<List<String>> getRowsAsString()方法获取表格中的所有值。然后用hamcrest matcher检查这个集合。所以最终的代码将非常简单:

assertThat(table.getRowsAsString(), contains(contains(equalTo("ADMIN"))));

答案 1 :(得分:0)

你可以这样做

WebElement adminSpan = driver.findElement(By.cssSelector("#usersForm:mainTable:n span[title='ADMIN']"));
System.out.println(adminSpan.getText().trim());

我添加了TABLE ID,以防这些管理员SPAN中有多个。 CSS选择器读取为查找具有usersForm:mainTable:n的id(#)的元素,该元素具有带SPAN ADMIN的后代(title

您可能需要trim(),也可能不需要trim()。我已经到了public class Model{ private List<Vector3f> vertices=new ArrayList<>(); private List<Vector3f> normals=new ArrayList<>(); private ArrayList<Integer> vaos=new ArrayList<>(); private float[] faces=new float[fvaoSize]; private float[] ks=new float[kvaoSize]; private float[] ka=new float[kvaoSize]; private float[] kd=new float[kvaoSize]; private int currentPlace=0,kcurrentPlace=0; private static final int fvaoSize=glGetInteger(GL12.GL_MAX_ELEMENTS_VERTICES)-(glGetInteger(GL12.GL_MAX_ELEMENTS_VERTICES)%12); private static final int kvaoSize=(fvaoSize/4)*3; private int facesd=0; private HashMap<String,Material> materials=new HashMap<>(); @SuppressWarnings("unused") private int plainFaceVAO=0,texFaceVAO=0,normalsFaceVAO=0,normalsTexVAO=0; @SuppressWarnings("unused") private int faceOffset=0, texOffset=0,texTexture=0,texCoords=0, normalOffset=0,normalCoords=0, normalTexOffset=0,normalTexNormalCoords,normalTexTexCoords,normalTexTexture=0; @SuppressWarnings("unused") private Shader faceShader=null,texShader=null,normalsShader=null,normalTexShader=null; private Material currMtl=null; public Model(File f,Shader faceShader,Shader texShader,Shader normalsShader,Shader normalTexShader){ loadModelData(f); this.faceShader=faceShader; this.texShader=texShader; this.normalsShader=normalsShader; this.normalTexShader=normalTexShader; faceOffset=glGetUniformLocation(faceShader.getID(),"trans"); texOffset=glGetUniformLocation(texShader.getID(),"trans"); texTexture=glGetAttribLocation(texShader.getID(),"tex"); texCoords=glGetAttribLocation(texShader.getID(),"texCoords"); normalOffset=glGetUniformLocation(normalsShader.getID(),"trans"); normalCoords=glGetAttribLocation(normalsShader.getID(),"normalsCoords"); } @SuppressWarnings("null") private void loadModelData(File f){ try(BufferedReader br=new BufferedReader(new FileReader(f))){ String line=""; while((line=br.readLine())!=null){ String[] words=line.split(" "); //System.out.println(line); if(line.startsWith("#")) continue; switch(words[0]){ case OBJ_VERTEX: vertices.add(new Vector3f(parseFloat(words[1]),parseFloat(words[2]),-parseFloat(words[3]))); break; case OBJ_VERTEX_NORMAL: normals.add(new Vector3f(parseFloat(words[1]),parseFloat(words[2]),-parseFloat(words[3]))); break; case OBJ_FACE: facesd++; FaceType cft=null; int slashCount=0; for(char c:words[1].toCharArray()){ if(c=='/') slashCount++; } if(slashCount==0){ cft=FaceType.COORDSONLY; }else if(slashCount==1){ cft=FaceType.TEXTURE; }else if(slashCount==2){ if(words[0].contains("//")){ cft=FaceType.NORMALS; }else{ cft=FaceType.NORMALS_AND_TEXTURE; } } switch(cft){ case COORDSONLY: Vector3f pos1=vertices.get(Integer.parseInt(words[1])-1); Vector3f pos2=vertices.get(Integer.parseInt(words[2])-1); Vector3f pos3=vertices.get(Integer.parseInt(words[3])-1); Vec3 Ks=(currMtl.getKs()!=null?currMtl.getKs():new Vec3(1)); Vec3 Ka=(currMtl.getKa()!=null?currMtl.getKa():new Vec3(1)); Vec3 Kd=(currMtl.getKd()!=null?currMtl.getKd():new Vec3(1)); float[] temp=new float[] { pos1.x,pos1.y,pos1.z,1.0f, pos2.x,pos2.y,pos2.z,1.0f, pos3.x,pos3.y,pos3.z,1.0f }; for(int i=0;i<12;i++){ faces[currentPlace+i]=temp[i]; } float[] ktemp=new float[] { Ks.x,Ks.y,Ks.z, Ks.x,Ks.y,Ks.z, Ks.x,Ks.y,Ks.z }; for(int i=0;i<9;i++){ ks[kcurrentPlace+i]=ktemp[i]; } ktemp=new float[] { Ka.x,Ka.y,Ka.z, Ka.x,Ka.y,Ka.z, Ka.x,Ka.y,Ka.z }; for(int i=0;i<9;i++){ ka[kcurrentPlace+i]=ktemp[i]; } ktemp=new float[] { Kd.x,Kd.y,Kd.z, Kd.x,Kd.y,Kd.z, Kd.x,Kd.y,Kd.z }; for(int i=0;i<9;i++){ kd[kcurrentPlace+i]=ktemp[i]; } kcurrentPlace+=9; currentPlace+=12; if(currentPlace==fvaoSize){ int fvbo=glGenBuffers(); FloatBuffer vertexPositionsBuffer=BufferUtils.createFloatBuffer(fvaoSize); vertexPositionsBuffer.put(faces); vertexPositionsBuffer.flip(); glBindBuffer(GL_ARRAY_BUFFER, fvbo); glBufferData(GL_ARRAY_BUFFER, vertexPositionsBuffer, GL_STATIC_DRAW); int ksvbo=glGenBuffers(); FloatBuffer ksBuffer=BufferUtils.createFloatBuffer(kvaoSize); ksBuffer.put(ks); ksBuffer.flip(); glBindBuffer(GL_ARRAY_BUFFER, ksvbo); glBufferData(GL_ARRAY_BUFFER, ksBuffer, GL_STATIC_DRAW); int kavbo=glGenBuffers(); FloatBuffer kaBuffer=BufferUtils.createFloatBuffer(kvaoSize); kaBuffer.put(ka); kaBuffer.flip(); glBindBuffer(GL_ARRAY_BUFFER, kavbo); glBufferData(GL_ARRAY_BUFFER, kaBuffer, GL_STATIC_DRAW); int kdvbo=glGenBuffers(); FloatBuffer kdBuffer=BufferUtils.createFloatBuffer(kvaoSize); kdBuffer.put(kd); kdBuffer.flip(); glBindBuffer(GL_ARRAY_BUFFER, kdvbo); glBufferData(GL_ARRAY_BUFFER, kdBuffer, GL_STATIC_DRAW); int vao = glGenVertexArrays(); glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, fvbo); glVertexAttribPointer(0, 4, GL_FLOAT, false, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, ksvbo); glVertexAttribPointer(3, 3, GL_FLOAT, false, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, kavbo); glVertexAttribPointer(4, 3, GL_FLOAT, false, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, kdvbo); glVertexAttribPointer(5, 3, GL_FLOAT, false, 0, 0); glEnableVertexAttribArray(0); glEnableVertexAttribArray(3); glEnableVertexAttribArray(4); glEnableVertexAttribArray(5); glBindVertexArray(0); glDeleteBuffers(fvbo); glDeleteBuffers(ksvbo); glDeleteBuffers(kavbo); glDeleteBuffers(kdvbo); ksBuffer=null; kaBuffer=null; kdBuffer=null; vertexPositionsBuffer=null; vaos.add(vao); glBindBuffer(GL_ARRAY_BUFFER, 0); currentPlace=0; kcurrentPlace=0; faces=new float[fvaoSize]; ks=new float[kvaoSize]; ka=new float[kvaoSize]; kd=new float[kvaoSize]; } break; case NORMALS: throw new RuntimeException("File is unsupported."); case NORMALS_AND_TEXTURE: throw new RuntimeException("File is unsupported."); case TEXTURE: throw new RuntimeException("File is unsupported."); default: throw new RuntimeException("File is unsupported."); } break; case OBJ_MTLLIB: materials=MTLLibLoader.loadMTLLib(f.toPath().getParent()+"/"+words[1]); break; case OBJ_USEMTL: System.out.println("Using Material "+words[1]+": Exists in hmap: "+materials.containsKey(words[1])); currMtl=materials.get(words[1]); break; default: break; } } int fvbo=glGenBuffers(); FloatBuffer vertexPositionsBuffer=BufferUtils.createFloatBuffer(fvaoSize); vertexPositionsBuffer.put(faces); vertexPositionsBuffer.flip(); glBindBuffer(GL_ARRAY_BUFFER, fvbo); glBufferData(GL_ARRAY_BUFFER, vertexPositionsBuffer, GL_STATIC_DRAW); int ksvbo=glGenBuffers(); FloatBuffer ksBuffer=BufferUtils.createFloatBuffer(kvaoSize); ksBuffer.put(ks); ksBuffer.flip(); glBindBuffer(GL_ARRAY_BUFFER, ksvbo); glBufferData(GL_ARRAY_BUFFER, ksBuffer, GL_STATIC_DRAW); int kavbo=glGenBuffers(); FloatBuffer kaBuffer=BufferUtils.createFloatBuffer(kvaoSize); kaBuffer.put(ka); kaBuffer.flip(); glBindBuffer(GL_ARRAY_BUFFER, kavbo); glBufferData(GL_ARRAY_BUFFER, kaBuffer, GL_STATIC_DRAW); int kdvbo=glGenBuffers(); FloatBuffer kdBuffer=BufferUtils.createFloatBuffer(kvaoSize); kdBuffer.put(kd); kdBuffer.flip(); glBindBuffer(GL_ARRAY_BUFFER, kdvbo); glBufferData(GL_ARRAY_BUFFER, kdBuffer, GL_STATIC_DRAW); int vao = glGenVertexArrays(); glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, fvbo); glVertexAttribPointer(0, 4, GL_FLOAT, false, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, ksvbo); glVertexAttribPointer(3, 3, GL_FLOAT, false, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, kavbo); glVertexAttribPointer(4, 3, GL_FLOAT, false, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, kdvbo); glVertexAttribPointer(5, 3, GL_FLOAT, false, 0, 0); glEnableVertexAttribArray(0); glEnableVertexAttribArray(3); glEnableVertexAttribArray(4); glEnableVertexAttribArray(5); glBindVertexArray(0); glDeleteBuffers(fvbo); glDeleteBuffers(ksvbo); glDeleteBuffers(kavbo); glDeleteBuffers(kdvbo); ksBuffer=null; kaBuffer=null; kdBuffer=null; vertexPositionsBuffer=null; vaos.add(vao); glBindBuffer(GL_ARRAY_BUFFER, 0); }catch(FileNotFoundException e){ // TODO Auto-generated catch block e.printStackTrace(); }catch(IOException e){ // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("Object \""+f.getName().substring(0,f.getName().lastIndexOf("."))+"\" loaded, has "+facesd+" faces"); } public void drawModel(Camera c,Vec3 offset){ //System.err.format("rendering model, %d vaos\n",vaos.size()); //Matrix4f modelMat=RenderMatrixHelper.getModelMatrix(offset,new Vec3(0)); faceShader.useShader(); c.useCameraView(); glUniform4f(faceOffset,offset.x,offset.y,offset.z,0f); for(Integer i:vaos){ glBindVertexArray(i); glDrawArrays(GL_TRIANGLES, 0, fvaoSize/4); } Shader.stopShader(); glBindVertexArray(0); } public int getNumFaces(){ return facesd; } private enum FaceType{ COORDSONLY, TEXTURE, NORMALS, NORMALS_AND_TEXTURE, } 这一点,因为它很容易,当我发现我需要它但却没有意识到这一点时,它节省了我找时间并添加它的时间。 :)

答案 2 :(得分:0)

尝试通过安装firepath找出答案 找出路径的路径