Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在另一个WebElement上使用FindElement时元素不可单击_Java_Selenium_Xpath - Fatal编程技术网

Java 在另一个WebElement上使用FindElement时元素不可单击

Java 在另一个WebElement上使用FindElement时元素不可单击,java,selenium,xpath,Java,Selenium,Xpath,我有一个奇怪的问题: 当我通过以下方式定位元素时: WebElement e1 = driver.findElement(By.xpath("//div1")); WebElement e2 = e1.findElement(By.xpath("//.[@class='c2']")); e2.click(); 我无法单击e2,因为:“元素无法滚动到视图中。” 但当我通过以下方式找到e2时: WebElement e2 = driver.findEleme

我有一个奇怪的问题:

当我通过以下方式定位元素时:

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()
时,坐标不同,仅在第二个代码段中正确)

我认为Selenium不喜欢“/”,因为:

WebElement e1 = driver.findElement(By.xpath("//div1"));
WebElement e2 = e1.findElement(By.xpath("div[@class='c2']"));
e2.click();
同样有效

知道我如何使用那里的Any(
)选择器吗?(
[@class='c2']
找不到)

[编辑]我已经有e1,因此需要通过
e1.findElement(…)

这与查找作为
driver.findElement(By.xpath(“/.[@class='c2']”)的元素相同

因为您没有将当前节点作为引用

您应该使用:

   e1.findElement(By.xpath(".//*[@class='c2']"));

请参见//前面的“.”,这意味着如果您只使用“/”而不是“/”,则当前或引用节点是父节点。它将从根节点进行搜索。点用于选择当前节点<代码>/
表示路径中的任何位置。因此,我认为使用
/.
是错误的。相反,请尝试使用单斜杠
//div1/[@class='c2']
。我认为这应该行得通。@hfontanez在一个语句中使用它当然行得通,问题是我已经有e1了,只能在里面搜索
e1.findelelement(“/.[@class='c2']”)
不会生成任何元素,不幸的是,我试图让您理解为什么
/.
不起作用。既然您已经有了web元素,使用点来引用它是没有意义的。不要试图找出谁应该使用点选择器来解决这个特定问题,而是尝试找出解决方案,而不管最终的Xpath表达式是什么样的。。。因此,您可能会得到两个不同的Web元素。工作的一个具有更明确的基于路径的选择器。不需要两行,只需为您要目标的元素创建一个XPATH。好吧,我一直认为另一个元素上的
FindElement
总是将上下文更改为该元素。谢谢你的澄清!回答得很好。我还要警告使用星号,因为如果当前路径中有多个元素符合该标准,星号可能会出现故障。
   e1.findElement(By.xpath(".//*[@class='c2']"));