我正在使用ExtJS呈现网页。它使用一些生成的ID呈现多个Combobox。每个组合框都有不同的选项。如何找出每个组合中选择的值?
在调试HTML DOM时,我观察到ExtJS渲染DIV是不同的,并且可选择的选项最后在不同的DIV中呈现。所以我无法定义任何XPath来找出所选的值。
以下是代码段
<div class="guide-bg" id="sample"><table>
<tr><td id="row1"> </td></tr>
<tr><td id="row2"></td></tr>
</table></div>
<script>
Ext.namespace('Ext.exampledata');
Ext.exampledata.states = [['Alabama'],[ 'Alaska'],['Arizona']];
var store1 = new Ext.data.SimpleStore({
fields: [ 'state'],
data : Ext.exampledata.states
});
var combo1 = new Ext.form.ComboBox({
store: store1, displayField:'state', typeAhead: true,
mode: 'local', forceSelection: true, triggerAction: 'all',
emptyText:'Select...', selectOnFocus:true, renderTo: 'row1'
});
var combo2 = new Ext.form.ComboBox({
store: store1, displayField:'state', typeAhead: true,
mode: 'local', forceSelection: true, triggerAction: 'all',
emptyText:'Select...', selectOnFocus:true, renderTo: 'row2'
});
</script>
渲染'sample'div后生成的HTML后
<div class="guide-bg" id="sample">
<table>
<tbody><tr><td id="row1">
<div class="x-form-field-wrap x-form-field-trigger-wrap" id="ext-gen148" style="width: 206px;">
<input type="text" name="ext-comp-1028" id="ext-comp-1028" autocomplete="off" size="24" class="x-form-text x-form-field x-form-empty-field" style="width: 181px;">
<img class="x-form-trigger x-form-arrow-trigger" src="sp.gif" id="ext-gen149">
</div></td></tr>
<tr><td id="row2">
<div class="x-form-field-wrap x-form-field-trigger-wrap" id="ext-gen150" style="width: 206px;">
<input type="text" name="ext-comp-1029" id="ext-comp-1029" autocomplete="off" size="24" class="x-form-text x-form-field x-form-empty-field" style="width: 181px;">
<img class="x-form-trigger x-form-arrow-trigger" src="sp.gif" id="ext-gen151">
</div></td></tr>
</tbody></table>
</div>
这些选项独立存在于DOM的末尾,如此
<div class="x-layer x-combo-list " id="ext-gen146" style="position: absolute; z-index: 12005; visibility: hidden;
left: -10000px; top: -10000px; width: 204px; height: 129px; font-size: 12px;">
<div class="x-combo-list-inner" id="ext-gen147" style="width: 204px; height: 129px;">
<div class="x-combo-list-item x-combo-selected">Alabama</div>
<div class="x-combo-list-item">Alaska</div>
<div class="x-combo-list-item">Arizona</div>
</div>
</div>
我不能只迭代每个x-combo-list-inner
,因为渲染组合的div和保存可用选项的div之间没有映射。如果它只是一个组合,那么它会没问题,但在我的情况下,我有多个具有相同值的组合框。
答案 0 :(得分:1)
使用selenium(How to use JavaScript with Selenium WebDriver Java)执行JS。在js中你可以使用&#34; Ext.ComponentQuery.query(&#39; combo&#39;)[0] .value&#34;获取组合值的代码
答案 1 :(得分:-1)
要获取所选的dropDown元素中的文本,您需要遍历x-combo-list-inner中的所有div,获取它的类值,如果它包含x-combo-selected,则返回它的文本。不确定js的正确性,但这应该看起来像(我还没有测试过这段代码):
driver.findElement(webdriver.By.css(".x-combo-list-inner")).then(function(parentElement) {
return parentElement.findElements(".x-combo-list-item").then(function(innerElements) {
return innerElements.forEach(function(elem) {
return elem.getAttribute('class').then(function(classValue) {
if(classValue.indexOf('x-combo-selected') > -1) {
return elem.getText();
}
});
});
});
});