我点击了一个元素,显示了一个对话框。在此对话框中有2个表(HTML)。表格中的表格。 表1包含文本"匹配审计代码" 表2有一些行和列。 第1列有一个复选框。 第2列具有char值,例如这封信"我") 第3列有一些文字,例如"与完整地址匹配"
我想找到第1列的复选框,其中包含文字说明"匹配到完整地址" 和父表有文字"匹配审核代码"
我尝试了以下Xpath,找到了包含文本"匹配到完整地址的复选框"
//div[contains(text(), "Matched to full address")]/ancestor::tr[1]/td[1]//input
我的Selenium Python脚本不会单击此复选框。开发人员说,可能有超过1"匹配到完整地址"在HTML的某个地方。
我需要Xpath从父表开始,其中包含文本"匹配审核代码" ,然后转到下一页,其中包含文字"与完整地址匹配" ,然后找到该复选框。
我怎么能建立Xpath?
HTML是:
<table class="GJPPK2LBAL" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td align="left" style="vertical-align: top;">
<div class="GJPPK2LBPK">Match audit codes</div>
</td>
<td align="left" style="vertical-align: top;">
<button class="gwt-Button GJPPK2LBLK" type="button">X</button>
</td>
</tr>
</tbody>
</table>
<table class="GJPPK2LBOK" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td align="left" style="vertical-align: middle;">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<tr>
<td align="left" style="vertical-align: top;">
<div style="overflow: auto; position: relative; width: 25em;">
<div style="position: relative;">
<table class="GJPPK2LBJE" cellspacing="0"
__gwtcellbasedwidgetimpldispatchingfocus="true"
__gwtcellbasedwidgetimpldispatchingblur="true">
<thead aria-hidden="false">
<colgroup>
<tbody>
<tr class="GJPPK2LBCD" __gwt_subrow="0" __gwt_row="0">
<td class="GJPPK2LBBD GJPPK2LBDD GJPPK2LBED">
<div __gwt_cell="cell-gwt-uid-5972" style="outline-style:none;">
<input type="checkbox" tabindex="-1"/>
</div>
</td>
<td class="GJPPK2LBBD GJPPK2LBDD">
<div __gwt_cell="cell-gwt-uid-5973" style="outline-style:none;">I</div>
</td>
<td class="GJPPK2LBBD GJPPK2LBDD GJPPK2LBOD">
<div __gwt_cell="cell-gwt-uid-5974" style="outline-style:none;">Matched to
full address
</div>
</td>
</tr>
<tr class="GJPPK2LBCE" __gwt_subrow="0" __gwt_row="1">
<td class="GJPPK2LBBD GJPPK2LBDE GJPPK2LBED">
<div __gwt_cell="cell-gwt-uid-5972" style="outline-style:none;">
<input type="checkbox" tabindex="-1"/>
</div>
</td>
<td class="GJPPK2LBBD GJPPK2LBDE">
<div __gwt_cell="cell-gwt-uid-5973" style="outline-style:none;">B</div>
</td>
<td class="GJPPK2LBBD GJPPK2LBDE GJPPK2LBOD">
<div __gwt_cell="cell-gwt-uid-5974" style="outline-style:none;">Matched to
building
</div>
</td>
</tr>
<tr class="GJPPK2LBCD" __gwt_subrow="0" __gwt_row="2">
<tr class="GJPPK2LBCE" __gwt_subrow="0" __gwt_row="3">
</tbody>
<tbody style="display: none;">
<tfoot style="display: none;" aria-hidden="true"/>
</table>
谢谢, 里亚兹
答案 0 :(得分:3)
我不确定我是否收到你的问题。您想要找到包含&#34;匹配审核代码&#34;的表格,然后转到包含&#34;匹配到完整地址&#34;的下一个表格,并在该表格内搜索同一行中的复选框作为&#34;匹配到完整地址&#34;文本?
如果是这样,那么它应该是这样的:
private static class DBHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "todolist.db";
public static final int DB_VERS = 1;
public static final String TABLE = "notes";
public static final String _ID = BaseColumns._ID;
public static final String NOTE_TITLE = "note_title";
public static final String NOTE_CONTENT = "note_content";
public static final String ALARM_SET = "alarm_set";
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERS);
}
@Override
public void onCreate(SQLiteDatabase db) {
// Creates Database
String sqlQuery = "CREATE TABLE " + TABLE + " (" +
_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NOTE_TITLE + " TEXT, " +
NOTE_CONTENT + " TEXT, " +
ALARM_SET + " TEXT" + ");";
db.execSQL(sqlQuery);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE);
onCreate(db);
}
}
如果//table[.//div[text()='Match audit codes']]/following-sibling::table[.//div[.='Matched to full address']][1]//div[.='Matched to full address']/ancestor::tr[1]/td//input[@type='checkbox'][1]
不起作用,请尝试.='Matched to full address'
。
答案 1 :(得分:1)
这是一个提示:
查找要匹配文本的所有元素。
List<WebElement> texts = driver.findElements(By.xpath("//td[@class='GJPPK2LBBD GJPPK2LBDE GJPPK2LBOD']"));
现在存储包含所需文本的元素的索引。
List<Integer> list = new ArrayList<>();
for(int i=0;i<list.size();i++){
if(text.get(i).getText().equals("Matched to full address"))
list.add(i);
}
现在您拥有所有索引的列表,其中文本为“匹配到完整地址”。您现在可以调用相应的复选框并播放。
List<WebElement> checks = driver.findElements(By.xpath("//td[@class='GJPPK2LBBD GJPPK2LBDE GJPPK2LBED']"));
for(int index:checks){
WebElement cb = checks.get(index);
//Do something with cb
}
希望它有所帮助。