2016-05-30 9 views
0

ヘッダーに表示されている「ログイン」ボタンをクリックできません。コードスニペットページにスクロールしなくても、要素はクリックできません(x、y)thread.sleep()

public class Muft_Mashwara_login { 

    public WebDriver driver= null; 

    @BeforeMethod 
    public void startBrowser() { 
     driver= new FirefoxDriver(); 
     driver.get("http://sqa.muftmashwara.be.vteamslabs.com/home"); 
     driver.manage().window().maximize(); 
     driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); 
    } 

    @Test 
    public void Click()throws InterruptedException { 
     //Thread.sleep(3000); 
     driver.findElement(By.xpath(".//*[@id='header2']/nav/div/ul/li/a")).click(); 
     WebElement loginTxt = driver.findElement(By.xpath("html/body/main/div/section/article[2]/div/div/form[1]/div[1]/div/input")); 
     loginTxt.sendKeys("[email protected]"); 
    } 

    @AfterMethod 
    public void Close() { 
     driver.close(); 
    } 
} 

「Thread.sleep」のコメントを外すと機能します。この場合、動的待機を実装する方法はわかりません。

答えて

0

はこのようなもので動作します:

WebDriverWait webDriverWait = new WebDriverWait(driver, 5); // Wait up to five seconds. 
wait.until(ExpectedConditions.visibilityOfElementLocated(
    By.xpath(".//*[@id='header2']/nav/div/ul/li/a"))).click(); 

// Or perhaps: 
//webDriverWait.until(ExpectedConditions.elementToBeClickable(
// By.xpath("//xpath"))).click(); 

積載オーバーレイはwebdriverをいくつかのバージョンのためにクリックすることを妨げるとしてあなたはまた、クリックする前にこれを追加することもできます。

wait.until(ExpectedConditions.invisibilityOfElementLocated(
    By.xpath("//div[@id='cover']"))); 
+0

は、すべてあなたが実行することができますで動作していないが、私のあなたの解決策のコードは、あなたが見つけることができるいくつかの不具合かもしれません – RovanDe

+0

更新された回答を参照してください – JockX

0

私はこのシナリオではwebdriverwaitが正しく動作しないと思うので、Thread.sleepが行います。

このコードを試してください。それは私の最後に成功しました。 そしてXPathを考える前に常にCssを使用してください。 CssはXpathより高速です。

@Test 
public void test() throws InterruptedException, AWTException{ 
    WebDriver driver = new FirefoxDriver(); 
    driver.manage().window().maximize(); 
    driver.get("http://sqa.muftmashwara.be.vteamslabs.com/home"); 
    Thread.sleep(10000L); 
    driver.findElement(By.cssSelector(".fa.fa-lock")).click(); 
} 
+0

Thread.Sleep()で私はそれを正常に実行することができた、私は静的待機を使用したくない – RovanDe

+0

driver.manage()。timeouts()。implicitlyWait(10、TimeUnit.SECONDS); –

0

使用以下のコード:

public class Muft_Mashwara_login { 

public WebDriver driver= null; 


    @BeforeMethod 
    public void startBrowser() { 

     driver= new FirefoxDriver(); 
     driver.get("http://sqa.muftmashwara.be.vteamslabs.com/home"); 
     driver.manage().window().maximize(); 
     driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); 

    } 

    @Test 
    public void Click()throws InterruptedException {    

     //use javascript click here 
     WebElement elem = driver.findElement(By.cssSelector("li>a[href='/login']")); 
     JavascriptExecutor executor = (JavascriptExecutor)driver; 
     executor.executeScript("arguments[0].click();", elem); 

     WebElement loginTxt = driver.findElement(By.cssSelector("div.form-group.ng-invalid>input[name='username']")); 
     loginTxt.click(); 
     loginTxt.sendKeys("[email protected]"); 

    } 

    @AfterMethod 
    public void Close() { 
     driver.close(); 
    } 
} 

が、uは、動的待機を使用する方法を学習したい場合は、以下の例を参照してください。

WebDriverWait webDriverWait = new WebDriverWait(driver, 20); 
webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("ue selector"))); 

//u can use by xpath or class or name here also 
// this will until the element is visible to the page 
関連する問題