Selenium按钮单击()或提交()?

Selenium按钮单击()或提交()?,selenium,selenium-webdriver,Selenium,Selenium Webdriver,需要以下场景的帮助(使用Java): 手动操作如下:在父页面中填写一些信息后,单击其上的“继续”按钮 <INPUT TYPE='button' VALUE='Continue' onClick='sendForm()'> 一个子页面会弹出这些来自父页面的信息,就像我手动操作时得到的一样,但父页面不再存在。使用时 btnContinue.click() 打开一个空白的子页面时,没有从父页面获取任何信息,并且它还抱怨“会话丢失” 我还尝试: JavascriptExecutor j

需要以下场景的帮助(使用Java):

手动操作如下:在父页面中填写一些信息后,单击其上的“继续”按钮

<INPUT TYPE='button' VALUE='Continue' onClick='sendForm()'>
一个子页面会弹出这些来自父页面的信息,就像我手动操作时得到的一样,但父页面不再存在。使用时

btnContinue.click() 
打开一个空白的子页面时,没有从父页面获取任何信息,并且它还抱怨“会话丢失”

我还尝试:

JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("arguments[0].click();",btnContinue);

但什么都不管用

似乎Submit()和Click()都无法模拟手动完成的操作。有什么想法吗


提前多谢

您没有指定语言,因此我假设您使用的是JAVA:

// since new tab has been opened - need to switch to this tab
// get a list of the currently open windows
Set<String> allTabs = driver.getWindowHandles();

// save the window handle for the current window
String programTab = driver.getWindowHandle();

// switching to the Save tab
String saveTab = ((String) allTabs.toArray()[1]);
driver.switchTo().window(saveTab);
// set timeout

// Click button
driver.findElement(By.id("buttonId")).click();
// set timeout

// switch back to the program tab
driver.switchTo().window(programTab);
//由于新选项卡已打开-需要切换到此选项卡
//获取当前打开窗口的列表
设置allTabs=driver.getWindowHandles();
//保存当前窗口的窗口句柄
String programTab=driver.getWindowHandle();
//切换到“保存”选项卡
String saveTab=((String)allTabs.toArray()[1]);
driver.switchTo()窗口(saveTab);
//设置超时
//点击按钮
driver.findElement(By.id(“buttonId”))。单击();
//设置超时
//切换回“程序”选项卡
driver.switchTo()窗口(programTab);

试试看,这是最简单、最容易的代码,可以帮助您理解父场景和子场景

public static void main(String[] args) {

WebDriver driver = new FirefoxDriver();
driver.get("http://demo.guru99.com/popup.php");

driver.findElement(By.xpath("html/body/p/a")).click();

// return the parent window name as a String
String parentWindow=driver.getWindowHandle();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

// Pass a window handle to the other window
for(String childWindow: driver.getWindowHandles())
{
System.out.println("child");

//switch to child window
driver.switchTo().window(childWindow);

//find an element and print text of it 
WebElement textLabel=driver.findElement(By.xpath("html/body/div[1]/h2"));
System.out.println(" text:  "+textLabel.getText());
driver.close();
}

System.out.println("Come to parent window");

//switch to Parent window
driver.switchTo().window(parentWindow);

//find an element and print text of it 
 WebElement logotext=driver.findElement(By.xpath("html/body/div[1]/h2"));
 System.out.println("text: "+logotext.getText());

driver.close();
}

欢迎来到堆栈溢出!请阅读,特别是关于(MCVE)的部分,这将帮助您调试自己的程序并自行解决问题。如果您这样做了,但仍然卡住了,您可以回来发布您的MCVE,您尝试了什么,以及执行结果,包括任何错误消息,以便我们可以更好地帮助您。还提供指向页面和/或相关HTML的链接。这看起来不像Java。你是说JavaScript吗?这两者非常不同。我使用Java开发测试用例,但web应用程序本身使用JavaScript和JSP,正如您从HTML代码中看到的。对不起,第一次发布。我应该提供更详细的信息。刚刚更新了这个问题,你能解释一下吗?@Andrew不确定我还能补充什么。据我所知,您有两个窗口或选项卡,需要在它们之间切换。既然您有“driver”对象,请使用我发布的代码,看看它是否有效。如果需要,在指示的位置添加一些超时。让我进一步说明,子窗口(一个单独的窗口,不是新选项卡)是通过单击父页面上的“继续”按钮生成的。当单击子页面上的Continue按钮时,应该关闭子窗口/页面并运行jsp脚本来创建用户。手动操作完全可以。但是SeleniumWebDriver单击子窗口/页面中的按钮没有任何作用。我只是想知道如何使用webdriver来处理这个问题。@Andrew好的,上面的代码也应该适用于windows。您确定您的Webdriver确实切换到子窗口并单击“继续”按钮吗?也许可以尝试获取子页面的标题作为测试,以确保Webdriver实际切换到了子页面。如果Webdriver切换到子页面,但没有单击“继续”,请尝试添加一些超时以等待子页面完全呈现,可能在Webdriver尝试单击它时“继续”不可见?它确实切换到子页面,因为我可以从子页面上的html正文中获取一些文本。子页面上的按钮被清晰地单击,因为我可以看到按钮的颜色被更改为蓝色,并且被单击。超时也没有帮助。我认为这与Webdriver如何与子页面上的post操作进行交互有关。切换到子页面时似乎确实存在任何问题。你面临什么问题?只需更新原始帖子,似乎在父页面上button.click()和button.submit()都不起作用。
 new Actions(driver).moveToElement(driver.findElement(By.xpath("//input[@value='Continue']"))).click().perform();
// since new tab has been opened - need to switch to this tab
// get a list of the currently open windows
Set<String> allTabs = driver.getWindowHandles();

// save the window handle for the current window
String programTab = driver.getWindowHandle();

// switching to the Save tab
String saveTab = ((String) allTabs.toArray()[1]);
driver.switchTo().window(saveTab);
// set timeout

// Click button
driver.findElement(By.id("buttonId")).click();
// set timeout

// switch back to the program tab
driver.switchTo().window(programTab);
public static void main(String[] args) {

WebDriver driver = new FirefoxDriver();
driver.get("http://demo.guru99.com/popup.php");

driver.findElement(By.xpath("html/body/p/a")).click();

// return the parent window name as a String
String parentWindow=driver.getWindowHandle();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

// Pass a window handle to the other window
for(String childWindow: driver.getWindowHandles())
{
System.out.println("child");

//switch to child window
driver.switchTo().window(childWindow);

//find an element and print text of it 
WebElement textLabel=driver.findElement(By.xpath("html/body/div[1]/h2"));
System.out.println(" text:  "+textLabel.getText());
driver.close();
}

System.out.println("Come to parent window");

//switch to Parent window
driver.switchTo().window(parentWindow);

//find an element and print text of it 
 WebElement logotext=driver.findElement(By.xpath("html/body/div[1]/h2"));
 System.out.println("text: "+logotext.getText());

driver.close();
}