selenium - 无法找到登录

时间:2017-04-27 06:18:27

标签: selenium

我正在尝试将登录信息定位到网页中,但由于元素不可见而无法执行相同操作 - 获取Nosuchelement异常。

我尝试使用下面的代码,但每次我得到例外。 WebDriverWait wait = new WebDriverWait(driver,30);         wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath( “HTML /体/形式/表/ tbody的/ TR [3] / TD [2] /输入”)));         driver.findElement(By.xpath( “HTML /体/形式/表/ tbody的/ TR [3] / TD [2] /输入”))的SendKeys( “管理员”);

任何人都可以帮助我。

感谢页面的HTML代码: -

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <title>Retail-J</title>
    </head>


    <frameset name ="mainFrameset" id ="mainFrameset" rows="55,*" frameborder="1" framespacing="2" border="2" bordercolor="#000000">
        <frame name="titleFrame" src="title.jsp" marginheight="0" marginwidth="0" noresize="noresize" scrolling="no">
        <frameset name="innerFrameset" id="innerFrameset" cols="20.0%,*" frameborder="0" border="0" framespacing="0" >
            <frame name="contentFrame"  src="dynamicContents.jsp" marginheight="0" marginwidth="0" noresize="noresize" target="mainFrame" scrolling="auto">
            <frame name="mainFrame" src="Welcome.jsp" marginheight="0" marginwidth="0" scrolling="auto">
        </frameset>
        <noframes> 
            <body bgcolor="#FFFFFF" text="#000000" topmargin="0" leftmargin="0">
            Sorry your browser does not support framesets. 
             </body>
        </noframes> 
    </frameset>
</html>

3 个答案:

答案 0 :(得分:0)

问题有点模糊,因为你没有提供相关DOM的任何例子;但是,您可以首先验证目标元素是否对浏览器实际可见。有时登录元素是隐藏的,仅在用户操作时出现(例如鼠标单击或鼠标悬停)。 Selenium有几个函数可以让你看到元素可见(参见here)。如果似乎没有其他工作可行,您可以使用Javascript executor查找元素并将其返回使用,尽管这不是一个好习惯。

答案 1 :(得分:0)

NoSuchElement异常表示您的定位器不正确。尝试下面的事情:

  1. 尝试使用ID,NAME或XPATH查找元素。确保定位器是唯一的?
  2. 检查元素是否在iframe / frame中?
  3. 等待元素可见性。
  4. 让我知道它是否适合你。

答案 2 :(得分:0)

您没有指定您为项目使用的语言,因此我只想在C#中给出答案。

猜测我会认为它是Web驱动程序执行速度过快而且使用了错误的定位器的混合物,可能是一个多次使用相同ID的登录页面,这使事情复杂化。

将以下等待添加到您的解决方案中,看看是否有帮助:

    Task.Delay(2000).Wait();