我目前正在使用selenium框架来启动Web应用程序。使用xpath定位元素。对于应用程序中的特定下拉(其中包含过滤器),xpaths会经常更改(对于下拉列表中的可用选项)。下拉列表中的选项位于span部分内。有没有办法处理动态xpath?目前我正在使用firebug来获取xpath。
答案 0 :(得分:0)
如果您知道会发生什么,可以随时使用XPATH文本匹配。
const https = require('https');
var apiCall = function(url, callback) {
var apiUrl = {
host: 'abc.com',
path: '/' + url,
headers: {
'X': 'Y'
}
};
https.get(apiUrl, function (res) {
var body = '';
res.on('data', function(data) {
body += data;
});
res.on('end', function() {
if (res.statusCode !== 200 && res.statusCode !== 201) {
console.log('we shouldnt be in here if status is 200');
console.log('status is: ' + res.statusCode);
console.log('the end point we want to hit is: ' + url);
callback({ reason: 'the api did not respond OK 200', data: { head: res.headers, statusMessage: res.statusMessage } }, null);
return;
}
var rateLimitRemaining = res.headers['x-ratelimit-remaining'];
if (rateLimitRemaining > 0) {
console.log("Calls Left: " + rateLimitRemaining);
callback(null, JSON.parse(body));
} else {
callback({ reason: 'we are out of API calls', data: res }, null);
}
});
}).on('error', function(error) {
callback({ reason: 'there is an error with the api', data: error }, null);
});
};
module.exports = apiCall;
如果您在下拉列表中有列表元素:
//*[text()='DropdownValue']
如果您可以提供下拉结构的示例或仅提供案例的HTML代码,那么找到合适的解决方案会更容易。
答案 1 :(得分:0)
您可以获取下拉列表中的每个元素,获取包含该文本的元素的索引,然后单击它:
List<WebElement>elems = driver.findElements(By.xpath("xpath from every element"));
elems.get(getIndex(elems, "Abereen District")).click();
private int getIndex(List<WebElement>elems, String elemText) {
for(int i = 0; i < elems.size(); i++)
{
if(elems.get(i).getText().contains(elemText))
return i;
}
return -1;
}