Java 在selenium webdriver中找不到可拖动的web元素(其他用户可以使用相同的代码执行此操作)

Java 在selenium webdriver中找不到可拖动的web元素(其他用户可以使用相同的代码执行此操作),java,eclipse,selenium,automation,webdriver,Java,Eclipse,Selenium,Automation,Webdriver,在eclipse中使用java编写测试脚本时,我尝试使用selenium webdriver测试拖放功能。我找不到要拖动的web元素,而我的其他朋友可以找到具有相同代码的元素。 下面是我们都使用过的代码 WebElement draggable = driver.findElement(By.id("draggable")); 我正在使用网站www.way2automation.com/demo.html,我试图查找webelement的页面是 请提供一些建议以查找webelement。使用

在eclipse中使用java编写测试脚本时,我尝试使用selenium webdriver测试拖放功能。我找不到要拖动的web元素,而我的其他朋友可以找到具有相同代码的元素。 下面是我们都使用过的代码

WebElement draggable = driver.findElement(By.id("draggable"));
我正在使用网站www.way2automation.com/demo.html,我试图查找webelement的页面是


请提供一些建议以查找webelement。

使用Action类尝试下面的代码。

WebElement from = driver.findElement(By.id("drag"));            
WebElement to = driver.findElement(By.id("drop"));

Actions act = new Actions(driver);
act.clickAndHold(from).build().perform();
Thread.sleep(3000);
act.clickAndHold(to).moveToElement(to).release(to).build().perform();
Thread.sleep(2000);

即使使用正确的定位器,也无法识别WebElements,因为这些WebElements位于iFrame下,所以在执行拖放操作之前,首先需要切换到iFrame。然后我们还需要检查SourceElement和DestinationElement的可用性。下面的代码可以很好地解决这个问题

//Wait for the frame to be available and switch to it
            WebDriverWait wait = new WebDriverWait(driver, 5);
            wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector(".demo-frame")));
            WebElement Sourcelocator = driver.findElement(By.cssSelector(".ui-draggable"));
            WebElement Destinationlocator = driver.findElement(By.cssSelector(".ui-droppable"));
            builder.dragAndDrop(Sourcelocator,Destinationlocator).build().perform();
            String actualText=driver.findElement(By.cssSelector("#droppable>p")).getText();
            Assert.assertEquals(actualText, "Dropped!");

嗨,杰尼什,谢谢你的回答。我尝试使用您的代码查找web元素,但它不起作用,并给出与“无此类元素:无法定位元素:{”方法“:“id”,“选择器“:“drag”@Meenal,将id“drag”和“drop”替换为您的元素id。要执行拖放,我们可以使用selenium的Actions类,如下所示:Actions action action=new Actions(驱动程序);action.dragandropby(dragElement,500150.build().perform());注意:在要放置元素的位置,分别用x坐标和y坐标替换500和150。@Meenal,但我想这不是纠正方法,因为如果web元素坐标发生变化,测试用例将失败。因此我建议您尝试上述代码。要执行拖放,我们可以使用sel的Actions类enium如下:Actions action=新操作(驱动程序);action.dragAndDropBy(dragElement,500,150).build().perform();注意:在要放置元素的位置,分别用x坐标和y坐标替换500和150。