0

我正在尝试自动化在网站上预订巴士票的场景。我在 Eclipse 中使用 Selenium WebDriver,当我尝试定位元素时,即“乘客姓名”,没有编译错误,但在执行时显示错误,例如“ Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//input[@name='i_passengerAge']"}”。

下面的 HTML 和 Java 代码,我也需要一个仓促的解决方案。

我的系统信息:

  • Windows 7的
  • 硒网络驱动程序 2.31
  • 日食固件

网页的 HTML:

<input name="i_passengerName" id="i_passengerName" maxlength="30" class="inputclass pageRequired commonInputStyle" title="Please enter your name!" type="text">

<input name="i_passengerAge" id="i_passengerAge" maxlength="2" size="4" class="inputclass fillAge digits commonInputStyle" type="text">

我的自动化脚本:

WebElement PD_Name = driver.findElement(By.name("i_passengerName"));
PD_Name.sendKeys(new String[] {"Testing"});
PD_Name.submit();

WebElement PD_Age = driver.findElement(By.name("i_passengerAge"));
PD_Age.sendKeys(new String[] {"45"});
PD_Age.submit();
4

5 回答 5

1

我自己正在使用 C#,因此您必须在此处检查语法,但我相信您的问题可能是您访问元素的速度太快(在页面完全加载之前)。我建议尝试WebDriverWait上课。我相信Java是这样的:

WebDriverWait wait = new WebDriverWait(_driver, timeout);
wait.until(_driver.findElement(By.name("i_passengerAge")));

在此行之后,您可以安全地访问该元素,因为您已确认它已完全加载到页面上。

于 2013-04-09T23:10:54.050 回答
1

这两行之间的错误意味着 PD_Name.submit(); WebElement PD_Age = driver.findElement(By.name("i_passengerAge"));

提交后,您必须等到整个页面加载完毕。根据这个你必须修改脚本并编写 waitForElementPresent(element) 函数。

在这种情况下,您的脚本将是:enter code here

PD_Name.submit();
waitForElementPresent(i_passengerAge);
WebElement PD_Age = driver.findElement(By.name("i_passengerAge"));

试试这个,让我知道它是否有效。

谢谢,克里希纳。

于 2013-04-26T09:20:39.283 回答
0

我希望您尝试使用By.id,By.cssSelector或来获取元素By.xpath

注意submit()方法。因为它会自动搜索要发送的表单,有时它可能会失败。这就是为什么我更喜欢好旧的click()

通过.id:

WebElement PD_Name=driver.findElement(By.id("i_passengerName"));
PD_Name.sendKeys("Testing");
PD_Name.click();

通过.xpath:

WebElement PD_Name=driver.findElement(By.xpath("//input[@name='i_passengerName']"));
PD_Name.sendKeys("Testing");
PD_Name.click();

对于 cssSelector 的方式,可以看这里

告诉我它是否有所改善。=)

编辑 :

实际上,没有i_passengerGender

于 2013-04-09T09:36:23.557 回答
0

您能否检查一下这是否像 HemChe 之前所说的那样位于一个框架中,如果是这样,您需要切换到该特定框架。

于 2013-04-09T12:05:05.267 回答
0

1) 输入文字前先使用wait命令

2)不要使用“id”定位器,因为两者相同

3)对两个输入元素都使用“类”定位器。

于 2013-07-13T04:57:58.047 回答