Selenium WD - southwest.com

时间:2015-10-20 05:13:39

标签: selenium selenium-webdriver

我经常在“名字”测试框中得到“没有这样的元素例外”

以下是我的代码:

public class southwestSignUpSave {
WebDriver oBrw;

@Before
public void loadwebsite (){
    oBrw = new FirefoxDriver();
    oBrw.manage().window().maximize();
    oBrw.get("https://southwest.com");
    oBrw.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

}

@Test
public void signUpAndSave(){

    oBrw.findElement(By.partialLinkText("OFFERS")).click(); 
    oBrw.findElement(By.partialLinkText("Sign")).click();
    //oBrw.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    WebDriverWait oWait = new WebDriverWait(oBrw, 30);
   oWait.until(ExpectedConditions.presenceOfElementLocated(By.id("FIRST_NAME")));

    oBrw.findElement(By.id("FIRST_NAME")).clear();
    oBrw.findElement(By.id("FIRST_NAME")).sendKeys("abc");
    oBrw.findElement(By.id("LAST_NAME")).clear();
    oBrw.findElement(By.id("LAST_NAME")).sendKeys("asd");
    oBrw.findElement(By.id("EMAIL")).clear();
    oBrw.findElement(By.id("EMAIL")).sendKeys("abc@asd.com");
    new Select(oBrw.findElement(By.id("HOME_AIRPORT"))).selectByVisibleText("Akron/Canton, OH - CAK");
    oBrw.findElement(By.id("IAN")).click();


}

}

我尝试使用id和name。

我在哪里出错了。我是Selenium WD的新手

3 个答案:

答案 0 :(得分:0)

您可以尝试使用xpath查找元素。为此,你需要在firefox中安装firepath插件,然后使用firepath检查元素。

oBrw.findElement(By.xpath("copy paste the xpath here")).clear();

我还建议在loadwebsite()方法中使用System属性加载驱动程序。

System.setProperty("webdriver.firefox.driver", "//your driver path");
oBrw=new FirefoxDriver();

如果在新选项卡/窗口中打开“签名”页面,则需要导航到该选项卡/窗口,因为默认情况下Selenium会保留在打开选项卡中。要导航,您需要在单击“签名”后添加以下代码行 -

Set<String> s=wd.getWindowHandles();
Iterator<String> it=s.iterator();
it.next();//control goes to 1st default tab
String str=it.next().toString();//control goes to the next tab
oBrw.switchTo().window(str);//driver switches to the new window/tab.

如果元素存在于框架内,那么在找到框架内的元素之前,您还需要先切换到该框架。以下是代码 -

WebElement web=oBrw.findElement(By.xpath("copy paste your frame xpath"));
oBrw.switchTo.frame(web);

现在尝试找到新标签/窗口中的元素。

答案 1 :(得分:0)

该文本框位于iFrame中,因此您需要先切换到该iFrame,然后尝试使用findElement方法查找文本框。

oBrw.findElement(By.partialLinkText("OFFERS")).click(); 
            oBrw.findElement(By.partialLinkText("Sign")).click();

            oBrw.switchTo().defaultContent();
            oBrw.switchTo().frame(0);           
            WebElement id = oBrw.findElement(By.name("FIRST_NAME"));
            id.sendKeys("USERNAME");

希望这有帮助。

答案 2 :(得分:0)

FIRST NAME输入文本字段位于iframe内。检查下面的HTML。

<iframe frameborder="0" src="https://luv.southwest.com/servlet/formlink/f?kOHpjQACAY" onload="scroll(0,0);" verticalscrolling="no" horizontalscrolling="no" scrolling="no" title="Click 'n Save signup form"></iframe>
<html dir="ltr">

<head>

  <body>
    <p>
      <span class="required">*Required</span>
    </p>
    <div class="clear"></div>
    <form id="cnsForm" onsubmit="return validateForm();" action="https://luv.southwest.com/servlet/campaignrespondent" method="POST">
      <div class="form_field first_name">
        <label for="first_name">
          <input id="FIRST_NAME" type="text"=""="" maxlength="25" size="22" name="FIRST_NAME">
      </div>
...

因此,硒无法找到该元素。在这里,我们需要明确切换到iframe,如下所示。在找到FIRST_NAME之前插入下面的代码段。 (你可以插入格式正确的iframe xpath。我只是从firebug中抓取它。)

 WebElement iframeSwitch = oBrw.findElement(By.xpath("/html/body/div[1]/div[3]/div[2]/div[1]/div/div/div[4]/div/div/div/div[3]/iframe"));
            oBrw.switchTo().frame(iframeSwitch);