我有以下动态xpath:
/html/body[@class='modal-open']/div[@class='container']/form[@id='form_application']/div[@id='interviewContent']/div[@class='modal-dialog']/div[@class='modal-content']/div[@class='modal-body']/div[@id='form_application:interviewContent']/div[@id='form_application:questionDropdown']/select[@id='form_application:j_idt473']
如何使Selenium Web Driver独一无二?我打算使用Starts-with方法,但这与下拉框有关,其中所选值随每次登录而变化。
页面来源:
<br /><select id="form_application:j_idt473" name="form_application:j_idt473" class="form-control" size="1" style="width:250px;display:inline" onchange="mojarra.ab(this,event,'change','@this','form_application:questionDropdown form_application:dropdown_interview')"> <option value=""></option>
<option value="02">Alaska</option>
<option value="01">Alabama</option>
<option value="05">Arkansas</option>
<option value="60">American Samoa</option>
<option value="04" selected="selected">Arizona</option>
<option value="06">California</option>
""""
答案 0 :(得分:0)
您可以使用css属性选择器来匹配部分字符串。我会摆脱那个超级复杂的xpath并使用包含选择器来匹配子串。这样的事情应该可以解决问题...
select[onchange*="form_application:questionDropdown form_application:dropdown_interview"]
答案 1 :(得分:0)
正如您在问题中提到的, xpath
是动态的, HTML
清楚地将该元素显示为 {{ 1}} 标记,因此我们必须相应地构建 <select>
。当你谈到使用xpath
来查看我认为的 Starts-with method
和 id
属性时,我认为你是对的虽然属性是动态的,但 name
string
将是 form_application:
。所以我们可以使用以下constant
:
xpath
Select city = new Select(driver.findElement(By.xpath("//select[@class='form-control' and starts-with(@id,'form_application:')]")));
city.selectByIndex(2);