WebDriver:无法点击'单选按钮'

时间:2016-10-06 08:29:09

标签: java selenium-webdriver webdriver

我创建了两组包含在两个单独的类中的代码

需要执行的任务:需要点击'现金' PH付款页面上的按钮。

  1. 第一类=简单类,简单代码=代码有效,可以点击现金选项。
  2. 第二类=设置包含页面对象,框架使用不同的结构=代码在到达付款页面时无法点击现金选项=' org.openqa.selenium.StaleElementReferenceException:找不到元素缓存'

  3. 我在两个类中都使用了相同的定位器,但在' 2'中使用了正确的定位器。它无法点击广播'按钮;如上所列,我得到列出的错误;我试图创造定制的方法;使用循环等和不同的定位器,但没有任何作用。

  4. 工作代码和班级:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.BeforeSuite;
    import org.testng.annotations.Test;
    
    public class TestClass {
    
        @Test
        public void test() throws InterruptedException {
            //System.setProperty("webdriver.chrome.driver", "C:\\Users\\GBruno\\Desktop\\masteringSelenium\\Framework\\src\\test\\resources\\chromedriver.exe");
           // WebDriver driver = new ChromeDriver();
            WebDriver driver = new FirefoxDriver();
    
            driver.get("http://www.pizzahut.co.uk");
            driver.manage().window().maximize();
    
            //click pizza button
            driver.findElement(By.cssSelector("div[id='page'] [href='/menu/pizza']")).click();
    
            //select any pizza to start order
            driver.findElement(By.cssSelector("div[class='col-xxs-8 col-xs-6 col-sm-8 col-md-7 col-lg-6'] *> button")).click();
    
            //enter postcode and find hut
            Thread.sleep(2000);
            driver.findElement(By.cssSelector("#ajax-postcode-txt")).sendKeys("TS1 4AG");
            driver.findElement(By.cssSelector(" #get-store-btn")).click();
    
    
            //click start order button
            Thread.sleep(3000);
            driver.findElement(By.xpath(".//*[@id='store-collection-section']/div[2]/div[4]/div[4]/div/a")).click();
    
            //add pizza
            Thread.sleep(5000);
            driver.findElement(By.xpath(".//*[@id='pizza-product-list']/div/div[1]/div/div[2]/div[2]/div[3]/div/form/button")).click();
    
            //click mini basket
            driver.findElement(By.xpath("html/body/nav/div/div/div[3]/div/div[1]/div[2]/span[3]")).click();
    
            Thread.sleep(2000);
            //click checkout
            driver.findElement(By.xpath(".//*[@id='divBasket']/div[1]/div/div[2]/div[2]/a")).click();
    
            Thread.sleep(2000);
            //checkout guest & enter details
            driver.findElement(By.xpath(".//*[@id='frmCheckout']/div[2]/div/div[1]/a")).click();
            driver.findElement(By.xpath(".//*[@id='ddlTitleSelectBoxIt']")).click();
            driver.findElement(By.linkText("Mr")).click();
            driver.findElement(By.xpath(".//*[@id='FirstName']")).sendKeys("Tom");
            driver.findElement(By.xpath(".//*[@id='LastName']")).sendKeys("Hanks");
            driver.findElement(By.xpath(".//*[@id='EmailAddress']")).sendKeys("tom_hanks12344566@mail.com");
            driver.findElement(By.xpath(".//*[@id='ConfirmEmailAddress']")).sendKeys("tom_hanks12344566@mail.com");
            driver.findElement(By.xpath(".//*[@id='PhoneNumber']")).sendKeys("01234 5647890");
    
            driver.findElement(By.xpath(".//*[@id='btnFindAddress']")).click();
    
            Thread.sleep(3000);
            driver.findElement(By.xpath(".//*[@id='ddlAddressesToChooseSelectBoxItArrowContainer']")).click();
            driver.findElement(By.linkText("K F C 189-191 Linthorpe Road Middlesbrough TS14AG")).click();
            driver.findElement(By.xpath(".//*[@id='btnContinue']")).click();
    
            driver.findElement(By.xpath(".//*[@id='payment-methods']/div[1]/div/label/input")).click();
    
        }
    }
    



    代码dosnt工作:

    public void selectPaymentTypeAndPayForOrder() throws Exception {
        Thread.sleep(3000);
        driver.findElement(By.xpath(".//*[@id='payment-methods']/div[1]/div/label/input")).click();
    
        driver.findElement(By.cssSelector(" form[id='CheckoutForm'] input[data-paymentname='Cash']")).click(); 
    

1 个答案:

答案 0 :(得分:1)

以下代码解决了该问题:

List<WebElement> iframes = driver.findElements(By.tagName("iframe"));
if(iframes.size() == 0) {
    Assert.fail();       
} else {
    // Frames present    
    Assert.assertTrue(true);
}