【发布时间】:2021-01-22 19:18:43
【问题描述】:
我有一个奇怪的问题:
当我通过以下方式定位元素时:
WebElement e1 = driver.findElement(By.xpath("//div1"));
WebElement e2 = e1.findElement(By.xpath("//.[@class='c2']"));
e2.click();
我无法点击 e2,因为:“元素 无法滚动到视图中。”
但是当我通过以下方式找到 e2 时:
WebElement e2 = driver.findElement(By.xpath("//div1//.[@class='c2']"));
e2.click();
它有效。 (同样检查e2.getLocation()时坐标不同,仅在第二个sn-p中正确)。
我认为 Selenium 不喜欢“//.”,因为:
WebElement e1 = driver.findElement(By.xpath("//div1"));
WebElement e2 = e1.findElement(By.xpath("div[@class='c2']"));
e2.click();
也可以。
知道如何在那里使用任何 (.) 选择器吗? (.[@class='c2']找不到)
[编辑] 我已经有了 e1,因此需要通过 e1.findElement(...) 搜索这个元素
【问题讨论】:
-
点是选择当前节点。
//表示路径中的任何位置。因此,我认为使用//.是错误的。相反,请尝试使用单个斜杠//div1/.[@class='c2']。我认为这应该可行。 -
@hfontanez 这当然可以在一个语句中使用它,问题是我已经有 e1 并且只能在其中搜索。不幸的是,
e1.findElement("/.[@class='c2']")没有产生任何元素 -
我想让你明白为什么
//.不起作用。既然你已经有了 web 元素,使用 dot 来引用它是没有意义的。与其试图找出谁使用点选择器来解决这个特定问题,不如试着找出解决方案,而不管最终的 Xpath 表达式是什么样的。 -
“类”或样式可能是共享的......所以你可能会在那里得到两个不同的网络元素。一个有效的有一个更定义的基于路径的选择器。那里不需要两行,只需为您要定位的元素创建一个 XPATH。