Selenium Java FindElement查询无效于唯一的ID或XPATH



我正在尝试从这里选择电子邮件,密码和符号元素。

该元素具有唯一的ID,我可以复制XPATH检查。

我尝试了这些查询,无法弄清楚为什么找不到硒。

    WebElement emailfield = driver.findElement(By.id("lid"))
    WebElement emailfield = driver.findElement(By.xpath("//*[@id='lid']"));
    WebElement emailfield = driver.findElement(By.xpath("//*[@id=lid]"));

驱动器能够打开并启动Chrome来做到这一点。但是,我不幸运。请让我知道以什么方式无效。据我了解,ID应该是完全唯一的,但是by.id和by.xpath方法都没有找到元素。

这是我的代码。

    String email = "myemail";
    String password = "the_password";
    WebElement emailfield = driver.findElement(By.id("lid"));
    emailfield.sendKeys(email );
    WebElement passwordfield = driver.findElement(By.xpath("//*[@id=pwd]"));
    passwordfield.sendKeys(password );
    WebElement login = driver.findElement(By.id("submit_but"));
    login.click();

这是HTML表。

  <table width="260" align="center" class="mob_width" cellspacing="2" cellpadding="1">
                    <tbody><tr>
                        <td colspan="2">
                        <h3 class="signintxt">Sign In</h3> 
                        </td>
                    </tr>
                    <tr>
                    <td align="center" colspan="2"><span id="msgpanel"></span></td>
                    </tr>
                    <tr>
                       <td class="label">Email / Phone:</td>
                       <td align="left"><input name="lid" class="input usrbx" id="lid" onkeypress="clearmsg()" type="email" value=""></td>
                    </tr>
                    <tr>
                    <td class="label">Password:</td>
                    <td align="left"><input name="pwd" class="input passbx" id="pwd" onkeypress="clearmsg()" type="password"></td>
                    </tr>
                    <tr>
                    <td class="label"></td>
                    <td align="left"><div class="forgotpasslink"><span onclick="goToForgotPassword();">Forgot Password?</span></div>
                    </td></tr>
                    <tr id="hiptr" style="display: none;">
                                            <td class="label">&nbsp;</td><td align="left">&nbsp;</td>
                    </tr>
                    <tr>
                    <td class="emptytd"></td>
                    <td height="30" class="mobile-height">

                    <div class="sectxt">
                        <label>
                            <input name="rem" id="rem" type="checkbox" value="10">
                            <span class="securetxt">Keep me signed in</span>
                        </label>
                    </div>

                    </td>
                    </tr>
                    <tr>
                    <td class="emptytd"></td>
                    <td align="left">
                        <button name="submit" class="submit_mobile" id="submit_but" type="submit">Sign In</button>

                    </td>
                    </tr>
                </tbody></table>

这是一个明确的等待,并等待10秒并给出相同的错误。

    //explicit
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement aboutMe;
    aboutMe= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//form[@id='login']//*[@id='lid']")));
    aboutMe.click();

字段在<iframe>内部。您需要先切换到它

driver.switchTo.frame("zohoiam"); // switch by iframe ID
WebElement emailfield = driver.findElement(By.id("lid"));
// some more code
driver.switchTo().defaultContent(); // switch out of the iframe

有关更多开关选项,请查看此处。

您在编写XPath时遇到了句法错误,

//*[@id='lid'] 

有错误的语法[您可以使用Firebug&amp;壁炉]。

尝试以下XPath,它应该起作用,

.//*[@id='lid']

但是,您可以添加父级节点以使其更健壮,

.//form[@id='login']//*[@id='lid']

最后,您需要确保等待页面完全加载,然后才能进行元素识别。

有关明确等待的更多信息,请参阅Selenium webdriver明确等待

最新更新