为Selenium制作灵活的XPath(Python)

时间:2016-08-12 20:35:51

标签: python xml selenium xpath concatenation

我正在尝试使用selenium和python将web元素的文本内容设置为字符串。

代码: monthRow-7有效,但我希望能够将monthname = browser.find_element_by_xpath(("\"//*[@id='monthRow-") + monthnum + ("']/td[1]\"")).text更改为包含不同的数字。

我的想法是询问用户一个月(1-12),他们输入的内容存储在名为monthnum的字符串中。然后我可以将字符串monthnum连接到xpath以更改monthRow的数量。防爆。当提示输入月份编号时,用户输入9,因此monthRow-7更改为monthRow-9。

我试过了: monthnum其中var app = angular.module('StarterApp', []); app.controller("repeatCtrl", ['$scope', function($scope) { $scope.clients = [ { "id": "2013-W45", "clients": [ { "id": "1", "phone": "454-45686", "clientName": "Client1", "address": "ExampleAddress", "ZIP": 24971, "jobs": [ { "name": "ClientName", "jobs": [ { "name": "someproject", } ] }, { "name": "work 9-5", } ] }, ] }, { "id": "22432", "clientInfo": [ { "dow": "1", "clientName": "Client2", "jobs": [ { "name": "JobName", "jobs": [ { "name": "someProjetName", } ] }, { "name": "work 9-5", } ] }, ] } ] }]);是由用户输入设置的字符串。

但是这给了我一个错误:

“消息:无效的选择器:由于以下错误,无法找到具有xpath表达式”// * [@ id ='monthRow-7'] / td [1]“的元素: TypeError:无法在'Document'上执行'evaluate':结果不是节点集,因此无法转换为所需的类型。“

错误中列出的xpath表达式与我在代码中实际工作的xpath表达式相同。有什么方法可以通过将变量分配给变量来改变xpath吗?

1 个答案:

答案 0 :(得分:0)

我会使用string formatting

monthnum = 7
monthname = browser.find_element_by_xpath("//*[@id='monthRow-{}']/td[1]".format(monthnum)).text

此处{}将替换为monthnum的值。

我不太确定你在尝试什么,但我认为你的解决方案应该是这样的:

monthname = browser.find_element_by_xpath("//*[@id='monthRow-" + monthnum + "']/td[1]").text

所有这些圆括号和额外的引号都是不必要的。