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

Selenium WebDriver findElement(By.xpath()) not working for my case

我正在尝试在 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、名称或 class)

<input name="userName" class="LoginTextField" 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 中的元素,请告诉我。

据我所知,您关注的框架是框架集标签下的第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']"));