Selenium WebDriver findElement(By.xpath())不适用于我的情况

时间:2015-01-09 13:54:51

标签: iframe xpath selenium-webdriver

我正在尝试使用selenium webdriver中的xpath值来识别IE中的元素,但它不适用于任何一个

driver.findElement(By.xpath("//input[@id='userName']"))
driver.findElement(By.xpath("//*[@id='userName']"))

也试过完整的xpath但是没有用 -

//frameset[contains(@id,'topFrameset')]/frame[4]/html/body/table/tbody/tr[1]/td/table/form/tbody/tr[5]/td/table/tbody/tr[1]/td/input

以下是我尝试访问的页面上的输入标记(页面上没有重复的ID,或名称或类)

<input name="userName" class="eGainLoginTextField" id="userName" 
    onkeyup="OnKeyDownOnObject()" type="text" valign="middle"/>

请注意,此输入标记位于iframe内部,如下面的整个路径

//frameset/frame[4]/html/body/table/tbody/tr[1]/td/table/form/tbody/tr[5]/td/table/tbody/tr[1]/td/input

如果webdriver中有标准方法可以捕获iframe中的元素,请告诉我。

1 个答案:

答案 0 :(得分:0)

如我所见,您的相关框架是框架集标记下的第4个框架,您可以首先切换到它,然后尝试查找元素

请查看以下代码是否适用于您:

//To switch to the required frame, if found, in 20 seconds
try{
    WebDriverWait wait = new WebDriverWait(driver, 20);
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//frameset[contains(@id,'topFrameset')]/frame[4]")));
}catch(Throwable e){
    System.err.println("Error while switching to the frame. "+e.getMessage());
}

//locating the input element
driver.findElement(By.xpath("//input[@id='userName']"));