动态XPath- Selenium

时间:2017-10-10 19:41:02

标签: selenium xpath

我有以下动态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>
""""

2 个答案:

答案 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

的Python

Select city = new Select(driver.findElement(By.xpath("//select[@class='form-control' and starts-with(@id,'form_application:')]")));
city.selectByIndex(2);