dom中有一个直肠对象:
<rect class="slv-blank" id="id123" height="8.8" stroke-width="1px" width="18.8" x="59.2" y="37.5"></rect>
我正在尝试使用以下代码进行搜索:
WebDriverWait(driver, 1).until(ec.presence_of_element_located(("xpath", '//rect[@id="id123"]'))).click()
这是行不通的。
但是以下内容可以:
WebDriverWait(driver, 1).until(ec.presence_of_element_located(("xpath", '//*[name()="rect"][@id="id123"]'))).click()
关于第一个为什么不起作用的任何线索?
<rect>
所述<rect>元件是一个基本的SVG形状创建矩形,可以通过拐角的位置,它们的宽度和它们的高度限定。矩形的角可能会变圆。
一个例子:
<svg viewBox="0 0 220 100" xmlns="http://www.w3.org/2000/svg"> <!-- Simple rect element --> <rect x="0" y="0" width="100" height="100" /> <!-- Rounded corner rect element --> <rect x="120" y="0" width="100" height="100" rx="15" ry="15" /> </svg>
的属性的<rect>是元素如下:
x
y
width
height
rx
ry
pathLength
注意 :从SVG2开始,x,y,宽度,高度,rx和ry是几何属性,这意味着这些属性也可以用作该元素的CSS属性。
由于该<rect>元素是 SVG 元素,因此要定位此类元素,您必须在使用xpath访问元素时明确指定SVG命名空间,如下所示:
对于<svg>元素:
<svg>
//*[name()="svg"]
对于<g>元素:
<g>
//*[name()="svg"]/*[name()="g"]
对于<rect>元素:
//*[name()="svg"]/*[name()="g"]/*[name()="rect"]
//[name()=”svg”]/[name()=”rect”]