我经常在“名字”测试框中得到“没有这样的元素例外”
以下是我的代码:
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的新手答案 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);