带有Java的Selenium Webdriver:无法在浏览器弹出窗口

时间:2017-08-25 13:06:59

标签: selenium selenium-webdriver webdriver

  1. 转到以下网址: https://sports.ladbrokes.com/en-gb/
  2. 点击"立即加入"在窗口的右上角
  3. 会打开一个弹出的窗口,我需要在其中输入'名字'和其他信息
  4. 虽然'名字'输入框在DOM中有带name属性的输入标记,我无法用通常的方式找到它。请提出建议!

    当我说通常的方式时,像下面这样直接的东西不起作用:

    driver.findElement(By.xpath("//input[@name='firstname']"));
    driver.findElement(By.xpath("//input[@placeholder='First name']"))
    

2 个答案:

答案 0 :(得分:0)

这是一个iframe,这意味着你必须先切换到iframe才能找到那里的元素。

这是未经测试但与此类似的东西

{{1}}

您可能还需要等待以允许iframe显示/加载。我注意到它需要一秒钟或2秒才能加载,所以如果你试图立即切换,你最终将无法找到iframe异常。

另请注意,在我的示例中,我使用“lightbox-registration-frame”来查找可能不一定正确的iframe。通常你想使用我没有看到的iframe的名称或id,所以你可能需要使用索引或其他方法来查找iframe。

答案 1 :(得分:0)

首先,您必须输入iframe,然后找到字段。尝试以下代码,它适合您:

WebDriver driver= new FirefoxDriver();
driver.get("https://sports.ladbrokes.com/en-gb/");

// click on the Join now button 
driver.findElement(By.xpath(".//[@id='loginSubmit']/div[3]/button[2]")).click();

//find Locator of  frame    
WebElement frampath= driver.findElement(By.xpath(".//iframe[(@class='lightbox-registration-frame')]"));

//switch to frame for operations
driver.switchTo().frame(frampath);
driver.findElement(By.name("firstname")).sendKeys("fdf");
// more operations
//statement1 (operation you want to perform)
//statement2(operation you want to perform)

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

//Switch to main page       
driver.switchTo().defaultContent();