2017-02-12 4 views
1

上のSendKeysを呼び出すときに、私はこのコードを持っている:Ocasional InvalidElementStateExceptionまたはElementNotVisibleException入力

IWebDriver driver = new FirefoxDriver(); 
driver.Manage().Window.Maximize(); 
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30)); 
//Go to the powerbi site 
driver.Navigate().GoToUrl("https://powerbi.microsoft.com/en-us/"); 
//Go to the page with login form 
driver.FindElement(By.XPath("html/body/div[2]/header/nav/div/ul[3]/li[1]/a")).Click(); 
//Fill in email field 
driver.FindElement(By.XPath("//*[@id='cred_userid_inputtext']")).SendKeys("[email protected]"); 

私は自分のコンピュータ上でこのコードを起動すると、すべてがエラーなしで正常に動作します。しかし、私の上司のコンピュータでこのコードを起動すると、時にはうまく機能しないことがあります。

エラーが発生した場合は、常に最後のコード行に表示されます。 InvalidElementStateException(対象要素が有効になっていない場合)またはElementNotVisibleException(対象要素が表示されていない場合)のエラーを覚えていません。

私はすべてがClick()メソッドにあるとします。 documentationさんのコメント:

この要素をクリックします。クリックによって新しいページが読み込まれる場合、Click()メソッドはページが読み込まれるまでブロックしようとします。

ブロックする方法はよく分かりません。

答えて

0

ボタンをクリックした直後に、入力が常に準備ができていないようです。 あなたが鍵を送信する前にそれを待つ必要があります。

を代わりにあなたの最後の行のこれを試してみてください:

WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0,0,5)); 
var input = wait.Until(ElementIsClickable(By.XPath("//*[@id='cred_userid_inputtext']"))); 
input.SendKeys("[email protected]"); 

そのチェックを行うためには、あなただけの、デリゲートを返すElementIsClickable機能を作成する必要がありますthis answerが示すように:また

public static Func<IWebDriver, IWebElement> ElementIsClickable(By locator) 
{ 
    return driver => 
    { 
     var element = driver.FindElement(locator); 
     return (element != null && element.Displayed && element.Enabled) ? element : null; 
    }; 
} 

WebDriverWaitクラスを使用するためにあなたがSelenium.WebDriverSelenium.Supportパッケージをインポートする必要がある場合がありますことを心に留めておくIあなたのプロジェクトには、this answerと同様に

+0

私にとってこの機能(ElementIsClickable)は機能しませんでした。私はExpectedConditions.ElementToBeClickable()関数を使用し、ここではうまく動作するコードを使用します: 'WebDriverWait wait = new WebDriverWait(driver、new TimeSpan(0、0、30)); var signIn = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath( "xpath"))); signIn.Click(); '私は上記のコードの外観についてお詫び申し上げます:) – Zirochka

0

DOMから要素を読み込み、InvalidElementStateExceptionやElementNotVisibleExceptionのような例外を発生させるのに時間がかかることがあります。 スニペットコードを実行しました。 正常に動作し、アクションを分離して要素を見つけようとします。

WebElement element = driver.findElement(By.xpath(".//xyz"/); 
element.sendkeys("data"); 

これは機能する可能性があります。

関連する問題