Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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
拖放操作不需要';t使用Selenium WebDriver和Java在iFrame中工作_Java_Selenium_Iframe_Webdriver_Action - Fatal编程技术网

拖放操作不需要';t使用Selenium WebDriver和Java在iFrame中工作

拖放操作不需要';t使用Selenium WebDriver和Java在iFrame中工作,java,selenium,iframe,webdriver,action,Java,Selenium,Iframe,Webdriver,Action,我正在尝试使用Selenium和Java执行拖放操作,但它不起作用。。原因是什么。。它没有给我任何错误,但它只是没有发生 这是我的密码 public class ActionDragDrop { public static void main(String[] args) throws InterruptedException { WebDriver driver = new ChromeDriver(); driver.get("https://ww

我正在尝试使用Selenium和Java执行拖放操作,但它不起作用。。原因是什么。。它没有给我任何错误,但它只是没有发生

这是我的密码

public class ActionDragDrop {

    public static void main(String[] args) throws InterruptedException {

        WebDriver driver = new ChromeDriver();
        driver.get("https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_draganddrop");
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        WebElement f=driver.findElement(By.xpath("//*[@id='iframeResult']"));
        driver.switchTo().frame(f);

        WebElement drag = driver.findElement(By.xpath("//*[@id='drag1']"));
        WebElement drop = driver.findElement(By.xpath("//*[@id='div1']"));

        Actions builder = new Actions(driver);
        Actions dragAndDrop = builder.clickAndHold(drag);
        builder.moveToElement(drop);
        builder.release(drop);
        builder.build();
        dragAndDrop.perform();  
    } 
}

您需要首先切换到iframe以执行拖放事件:

driver.switchTo().frame(0);                      //Move inside to the frame. 
WebElement body = driver.findElement(By.tagName("body"));
body.click();
WebElement from = driver.findElement(By.xpath("//your xpath")); 
Actions act = new Actions(driver);
act.clickAndHold(from).build().perform();
Thread.sleep(4000);
driver.switchTo().defaultContent();              //Move outside to the frame.

driver.switchTo().frame(1);                     //Move inside to another frame.
WebElement body = driver.findElement(By.tagName("body"));
body.click();
WebElement to = driver.findElement(By.id("guide_RIGHT_SAFETY_rect"));
act.clickAndHold(to).moveToElement(to).release(to).build().perform();
Thread.sleep(2000);
driver.switchTo().defaultContent();                //Move outside to another frame.

注意:请使用xpath、id、类名等,我刚刚复制了一个示例。或多或少的想法应该是相同的。

为了执行拖放事件,您需要首先切换到iframe:

driver.switchTo().frame(0);                      //Move inside to the frame. 
WebElement body = driver.findElement(By.tagName("body"));
body.click();
WebElement from = driver.findElement(By.xpath("//your xpath")); 
Actions act = new Actions(driver);
act.clickAndHold(from).build().perform();
Thread.sleep(4000);
driver.switchTo().defaultContent();              //Move outside to the frame.

driver.switchTo().frame(1);                     //Move inside to another frame.
WebElement body = driver.findElement(By.tagName("body"));
body.click();
WebElement to = driver.findElement(By.id("guide_RIGHT_SAFETY_rect"));
act.clickAndHold(to).moveToElement(to).release(to).build().perform();
Thread.sleep(2000);
driver.switchTo().defaultContent();                //Move outside to another frame.
注意:请使用xpath、id、类名等,我刚刚复制了一个示例。或多或少的想法应该是相同的。

试试下面的代码

因为您的
from
to
webelement位于同一
iframe
中。首先,您需要在
iframe内进行切换。

driver.get("https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_draganddrop");
driver.manage().window().maximize();

driver.switchTo().frame("iframeResult");   //Move inside to the frame. 
WebElement body = driver.findElement(By.tagName("body"));
body.click();
WebElement from = driver.findElement(By.xpath("//img[@id='drag1']")); 
WebElement to = driver.findElement(By.xpath("//div[@id='div1']"));

Actions act = new Actions(driver);
act.clickAndHold(from).perform();
Thread.sleep(4000);
act.clickAndHold().moveToElement(to).release(to).build().perform();
Thread.sleep(2000);
driver.switchTo().defaultContent();    //Move outside to the frame.
试试下面的代码

因为您的
from
to
webelement位于同一
iframe
中。首先,您需要在
iframe内进行切换。

driver.get("https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_draganddrop");
driver.manage().window().maximize();

driver.switchTo().frame("iframeResult");   //Move inside to the frame. 
WebElement body = driver.findElement(By.tagName("body"));
body.click();
WebElement from = driver.findElement(By.xpath("//img[@id='drag1']")); 
WebElement to = driver.findElement(By.xpath("//div[@id='div1']"));

Actions act = new Actions(driver);
act.clickAndHold(from).perform();
Thread.sleep(4000);
act.clickAndHold().moveToElement(to).release(to).build().perform();
Thread.sleep(2000);
driver.switchTo().defaultContent();    //Move outside to the frame.

我做了很多实验,最终找到了解决方案,代码如下:Python

DragAndDrop处的故障不是由iframe引起的

只需将每个步骤分开并执行即可

# drag leftbox and drop on rightbox

actions = ActionChains(driver)
actions.click_and_hold(leftbox).perform()
sleep(4)
actions.move_to_element(rightbox).perform()
sleep(4)
actions.release(rightbox).perform()

我做了很多实验,最终找到了解决方案,代码如下:Python

DragAndDrop处的故障不是由iframe引起的

只需将每个步骤分开并执行即可

# drag leftbox and drop on rightbox

actions = ActionChains(driver)
actions.click_and_hold(leftbox).perform()
sleep(4)
actions.move_to_element(rightbox).perform()
sleep(4)
actions.release(rightbox).perform()


错误是什么,你缺少setpropertyIt与Chrome配合良好,唯一没有发生的事情是拖放。它没有给我任何错误。所以这是逻辑问题,我单独点击了元素,这些元素工作正常。唯一没有发生的事情就是拖放。我不确定我在这里面临的是哪种问题。是的,我也面临着同样的问题,奇怪的是,错误是什么,你缺少设置属性。Chrome可以正常工作,唯一没有发生的事情就是拖放。它没有给我任何错误。所以这是逻辑问题,我单独点击了元素,这些元素工作正常。唯一没有发生的事情就是拖放。我不确定我在这里面临的是哪种问题。是的,我也面临同样的问题,奇怪的是,我使用了同样的代码--WebElement f=driver.findElement(By.xpath(“/*[@id='iframesult']));驱动程序切换到()帧(f);你能分享你的页面的POM吗?我只是用main方法运行这个简单的java程序。没有任何框架或Maven与此相关。@anshul Gupta,我猜
from
to
元素在同一个iframe中,因此不需要从一个iframe移动到另一个。@JainishKapadia当然,我刚才给了他一个例子,说明如何实现这个iframe可以是相同的。我使用这个代码做了同样的事情--WebElement f=driver.findElement(By.xpath(“/*[@id='iframesult']”);driver.switchTo().frame(f);你能分享你的页面的POM吗?我只是用main方法运行这个简单的java程序。没有任何框架或Maven附加到它上。@anshul Gupta,我猜
from
to
元素在同一个iframe中,所以不需要从一个iframe移动到另一个。@JainishKapadia sure,我刚才给了他一个例子,说明了如何实现这个iframe可以是相同的。实际上问题是代码执行成功,没有显示任何错误。请在您的末尾查看我的代码,看看是否显示了任何错误。我想Action类已经不起作用了。最新的selenium
3.5.3
您也可以检查我的这个问题。参考此问题了解更多详细信息。如果您有其他解决此类问题的方法,请提供您的建议。(例如,我们可以在不使用action类的情况下实现此功能吗?)是的,我会尝试。但这很奇怪,我也想知道为什么它不起作用??是否有任何地方记录了此操作是否对某个版本的selenium不起作用?我在这里没有看到它-实际上问题是代码执行成功,没有显示任何错误。请查看我的代码,查看是否显示任何错误。我想Action类已经不起作用了。您也可以查看我的问题。有关更多详细信息,请参阅此问题。如果您有其他方法解决此类问题,请提供您的建议。(例如,我们可以在不使用Action类的情况下实现此功能吗?)是的,我会尝试。但这很奇怪,我也想知道为什么它不起作用??是否有任何地方记录了该操作是否对某某版本的selenium不起作用?我在这里没有看到-