我需要你的帮助。 所以,这是关于我正在构建的Selenium CSS Locator,它基于我在innerHTML中看到的内容。我的问题很简单:CSS定位器允许的属性是什么以及如何使其严格?
例如,对于HTML
<input id="tbd" type="text" disabled="disabled">
<input type="submit" id="b1" value="b11" onclick="javascript: alert('button1')">
对于上面的HTML,可以分别轻松构建CSS:
css=input[id="tbd"][type="text"][disabled="disabled"]
css=input[id="b1"][value="b11"][onclick="javascript:alert('button1')"]
正如我发现的那样,不支持onclick和disabled作为属性。所以,你去!我如何知道要选择哪个locatorType?
我的第二个问题,我希望找到定位器非常严格。 例如, 我希望这个定位器
css=input[name="tbd"][type="text"]
匹配此HTML
<input name="tbd" type="text">
而不是这个
<input name="tbd" type="text" disabled="disabled">
这就是我所说的严格意义。
任何帮助?
谢谢, 阿米特
答案 0 :(得分:0)
对于已停用的元素,有disabled pseudo-class:
css=input:disabled[id="tbd"][type="text"]
来自that document似乎你真的不能通过onclick和其他事件来选择(这是合乎逻辑的,css负责表示,而不是js事件)。为什么不使用XPath?
我猜想你的最后一个问题可以改写如下:
css=input[type="text"]
与此HTML <input type="text">
相匹配,而非此<input type="text" disabled="disabled">
AFAIK没有这种“严格”匹配。您需要指定仅匹配所需元素的完整选择器:css=input:enabled[type="text"]
或css=input:not(:disabled)[type="text"]
。
答案 1 :(得分:0)
对复杂的选择器使用xpath,它将为您节省大量的时间和代码。
这是xpath选择器用法的一个示例,但为了简洁起见使用了不同的库
(BY_ID_XPATH
和BY_ID_AND_NOT_DISABLED_XPATH
xpath表达式对于您的selenium代码是相同的):
from lxml import etree
HTML = """
<input id="tbd" type="text" disabled="disabled">
<input id="tbd" type="text">
"""
BY_ID_XPATH = '//input[@id="tbd"]'
BY_ID_AND_NOT_DISABLED_XPATH = '//input[@id="tbd" and not(@disabled)]'
elements_tree = etree.fromstring(HTML, parser=etree.HTMLParser())
elements_tree.xpath(BY_ID_XPATH)
# matches 2 elements: [<Element input at 102ea1d08>, <Element input at 102ea1db8>]
elements_tree.xpath(BY_ID_AND_NOT_DISABLED_XPATH)
# matches 1 element: [<Element input at 102ea1d08>]
id
属性在整个网页中应该是唯一的。但是情况并非总是如此,因为没有什么可以阻止开发人员使用多个相同的id
值。
如果项目中有任何功能 - 您可以使用id
作为唯一属性来保持自动化代码的简洁和清洁,并在主页和#34;上提交类似&#34;重复ID属性的错误。
对于onclick
匹配您的选择器将如下所示:
BY_ONCLICK_XPATH = """//input[@onclick="javascript:alert('button1')"]"""