提问者:小点点

Selenium网络驱动程序等待预期条件失败:等待位于By.id的元素的可见性


我试图把硒网络驱动程序等待,但我总是得到一个例外”

org. openqa.selenium.TimeoutException:预期条件失败:等待位于By.id的元素的可见性:mobile eNo(尝试20秒,间隔100毫秒)"。

我把秒数增加到100,然后也遇到了同样的问题,我的id是正确的。

    WebDriver d = new ChromeDriver();
    d.get("http://myurlOne");
    WebElement username = d.findElement(By.id("username_id"));          
    username.sendKeys("123");
    WebElement password = d.findElement(By.id("password_id"));
    password.sendKeys("123");
    d.findElement(By.id("loginButton")).click();
    System.out.println("logged in successfully");
    d.get("http://navigatedurl");
    JavascriptExecutor js = (JavascriptExecutor)d;  
    System.out.println("navigated to new page"); 
    WebDriverWait wait__mob = new WebDriverWait(d, 20);
    try {
        System.out.println("Start"+new Date());
        wait__mob .pollingEvery(100,TimeUnit.MILLISECONDS).until(ExpectedConditions.visibilityOfElementLocated(By.id("mobileNo")));
        d.findElement(By.id("mobileNo")).sendKeys("99999999999);
    } catch (TimeoutException e) {
        // TODO: handle exception
        System.out.println(e.toString());
    } 

分区代码:

 <div class="form-group">
   <label class="col-xs-5 control-label" for="mobileNo">Mobile No.</label>
     <div class="col-xs-6 leftpadding-none">
        <input type="tel" class="form-control k-input" id="mobileNo" 
       name="inputmobileNo" placeholder="" maxlength="10"> <!--required 
       pattern="\d{10}" validationMessage="Mobile No. is Required"-->
  </div>

共1个答案

匿名用户

根据JavaDocs of WebDriverWait Class,如果你想改变轮询间隔,你需要在构造函数中改变它,因为构造函数如下:

WebDriverWait(WebDriver driver, long timeOutInSeconds, long sleepInMillis)

Wait will ignore instances of NotFoundException that are encountered (thrown) by default in the 'until' condition, and immediately propagate all others.

向前看,当您尝试在元素上调用sendKeys()时,您需要调用期望条件方法元素ToBeClickable。

所以你的代码将是:

WebDriver d = new ChromeDriver();
d.get("http://myurlOne");
WebElement username = d.findElement(By.id("username_id"));          
username.sendKeys("123");
WebElement password = d.findElement(By.id("password_id"));
password.sendKeys("123");
d.findElement(By.id("loginButton")).click();
System.out.println("logged in successfully");
d.get("http://navigatedurl");
System.out.println("navigated to new page"); 
WebDriverWait wait__mob = new WebDriverWait(d, 20);
try {
    System.out.println("Start"+new Date());
    wait__mob.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='form-group']//label[contains(.,'Mobile No.')]//following::div[1]/input[@class='form-control k-input' and @id='mobileNo' and @type='tel']"))).sendKeys("9999999999);
} catch (TimeoutException e) {
    System.out.println(e.toString());
}