0

我是硒的新手。我正在练习在http://www.countdown.tfl.gov.uk上写一个测试用例。以下是我遵循的步骤:

  • a) 我打开浏览器到 selenium Web Driver
  • b) 找到搜索文本框并输入 H32 并单击搜索按钮到 selenium。

直到这部分它工作正常。

现在在页面上,我实际上在页面左侧的搜索下获得了两条记录。我实际上是在尝试单击第一个,即“Towards Southall,Townhall”链接。什么都没有发生。

下面是我的代码:

 public class CountdownTest {   
        @Test
        public void tflpageOpen(){
            WebDriver driver = openWebDriver();
            searchforBus(driver,"H32");
                selectrouteDirection(driver)

        }

    //open the countdowntfl page
        private WebDriver openWebDriver(){
            WebDriver driver = WebDriverFactory.getWebDriver("FireFox");
            driver.get("http://www.countdown.tfl.gov.uk");
            return driver;

        }
        private void searchforBus(WebDriver driver,String search){
            WebElement searchBox = driver.findElement(By.xpath("//input[@id='initialSearchField']"));
            searchBox.sendKeys(search);
            WebElement searchButton = driver.findElement(By.xpath("//button[@id='ext-gen35']"));
            searchButton.click();

        }
        private void selectrouteDirection(WebDriver driver){
            WebElement towardssouthallLink= driver.findElement(By.xpath("//span[@id='ext-gen165']']"));
            ((WebElement) towardssouthallLink).click();

        }
    }

请帮我。

谢谢。

4

3 回答 3

0

既然你现在得到NoSuchElement Exception了,你可以尝试使用WebDriver 显式等待的以下代码。

WebDriverWait wait = new WebDriverWait(driver, 15);
WebElement towardssouthallLink = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("(//*[@id='route-search']//li/span)[1]")));
towardssouthallLink.click();

或者WebDriver 隐式等待

WebDriver driver = WebDriverFactory.getWebDriver("FireFox");
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.get("http://www.countdown.tfl.gov.uk");

提示:

  • 检索结果需要一些时间才能检索,因此请使用Explicit waitImplicit wait
  • 不要使用类似的定位器span[@id='ext-gen165'],它们是 ExtJs 自动生成的。
  • 在这种情况下,也可以使用 css 选择器:#route-search li:nth-of-type(1) > span
于 2013-05-24T10:56:23.893 回答
0

你没有打电话selectrouteDirection

你可能想要:

@Test
public void tflpageOpen(){
    WebDriver driver = openWebDriver();
    searchforBus(driver,"H32");
    selectrouteDirection(driver);
}

您也不需要在这里投射:

((WebElement) towardssouthallLink).click();

WebElement反正已经是了。

于 2013-05-24T11:19:39.420 回答
0

我发现这些链接的 id 是动态生成的。id 的格式为“ext-genXXX”,其中 XXX 是动态生成的数字,因此每次都会变化。

实际上,您应该尝试使用 linkText:

对于“走向绍索尔,市政厅”

driver.findElement(By.linkText("Towards Southall, Town Hall")).click

对于“走向豪恩斯洛,巴士站”

driver.findElement(By.linkText("Towards Hounslow, Bus Station")).click

这是一个逻辑:获取所有 id 以“ext-gen”开头的元素并对其进行迭代并单击具有匹配文本的链接。以下是 Ruby 代码(抱歉,我不太了解 Java):

links = driver.find_elements(:xpath, "//span[starts-with(@id, 'ext-gen')]")

links.each do |link|
   if link.text == "Towards Southall, Town Hall"
     link.click
     break
   end
end
于 2013-05-24T11:47:08.340 回答